阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL常用SQL语句:插入更新删除查询

96次阅读
没有评论

共计 4037 个字符,预计需要花费 11 分钟才能阅读完成。

整理一些 MySQL 常用 SQL 语句:插入、更新、删除、查询、根据指定的列对结果集进行排序等。

数据库表:

MySQL 常用 SQL 语句:插入更新删除查询  MySQL 常用 SQL 语句:插入更新删除查询   MySQL 常用 SQL 语句:插入更新删除查询

           student 表   course 表   sc 表

student 表中 sno 为主键,course 表中 cno 为主键,sc 表中 sno 和 cno 为联合主键,并且分别对应于 student 表的 sno 和 course 表的 cno。

关于联合主键:联合主键就是用 2 个或 2 个以上的字段组成主键。用这个主键组合包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。

1. 插入
(1) 不指定列名

insert into student values (218004, ‘ 龙猫 ’, ‘ 男 ’, ’23’)

注意:如果不指定插入的列名,则 value 中的值要对应表中的每一列,若少列,会报错。
(2) 指定列名

insert into student (sno, sname) values (218005, ‘ 王王 ’)

2. 更新

update student set sname = ‘ 刘一 ’, sex = ‘ 女 ’ where sno = 218004

3. 删除
(1) 删除表中的某行记录

delete from student where sno = ‘218005’

(2) 删除表中的所有记录

delete from student

delete * from student

4. 单表查询
(1) 查询所有

select * from student

(2) 查询指定列

select sno, sname from student

(3) distinct 去重
单列

select distinct snamefrom student

多列(只有所有指定的列信息都相同,才会被认为是重复的信息)

select distinct sname, sno, sex, age from student

note:
a. 在多列去重时,只有所有指定的列信息都相同(即 sname, sno, sex, age 都相同),才会被认定为重复的信息
b. distinct 必须放在第一列前,如果放在后面会报错,例:select sno, distinct snamefrom student
(4) 关于 where
  a. where 结合 and 或 or,AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来

select * from student where sno = 218001 and sname = ‘ 张雨 ’

  b. where 结合 between and,选取介于两个值之间的数据范围

select * from student where sno between 218003 and 218005

(5) 根据指定的列对结果集进行排序

select * from student order by sname

逆序

select * from student order by sname desc

(6) 根据 id 排序,返回头两条记录

select * from student order by sno limit 2

(7) 模糊查询

select * from student where sname like ‘ 刘 %’

查询不包含“刘”的记录

select * from student where sname not like ‘% 刘 %’

(8) 在 where 子句中规定多个值(使用 in)

select * from student where sno in (218001, 218002, 218004)

5. 多表查询

MySQL 常用 SQL 语句:插入更新删除查询

多表查询与单标查询对应,涉及多个表的查询为多表查询,其中又分为连接查询、嵌套查询、集合查询。
(1) 连接查询
连接查询是数据库查询中最常用的一种查询语句,是指通过连接字段和连接条件连接多个表从而进行查询,连接查询又分为小类:等值连接、非等值连接、内连接、外连接、自然连接、自身连接。

 a. 等值连接与非等值连接(其实就是根据两个表之间的关系,直接查询)
当连接条件是等于号(=)时的连接称之为等值连接,相反,当连接条件不是等于号就是非等值连接。

select * from student, sc where sc.sno = student.sno
select student.sno, student.sname, course.cname, sc.grade from student, course, sc where sc.sno = student.sno and sc.cno = course.cno

 b. 内连接
内连接就是等值连接或者非等值连接的另一种写法,写法有 INNER JOIN ON 或者 CORSS JOIN USING 两种。
从数学的角度讲就是求两个表的交集,从笛卡尔积的角度讲就是从笛卡尔积中挑出 ON 子句条件成立的记录。

select * from student inner join sc on sc.sno = student.sno
select * from student join sc on sc.sno = student.sno
select * from student cross join sc using(sno)

 c. 外连接:分为左外连接,右外连接,全外连接
左外连接
以 JOIN 关键字左边的表为基准, 没有匹配的记录则置 NULL。从笛卡尔积的角度讲,就是先从笛卡尔积中挑出 ON 子句条件成立的记录,然后加上左表中剩余的记录

# 两个表
select * from student left join sc on student.sno = sc.sno

MySQL 常用 SQL 语句:插入更新删除查询

# 三个表
select student.sno, student.sname, course.cname, sc.grade from sc left join student on sc.sno = student.sno left join course on sc.cno = course.cno

使用 join 关联三个表的语法格式:

表 A ——————————- 关联第一张表 B ———————— 关联第二张表 c

select * form 表 A left join 表 B on 表 A 字段 = 表 B 的 id    left join 表 c on 表 A 字段 = 表 c 的 id

右外连接
以 JOIN 关键字右边的表为基准,没有匹配的记录则置 NULL。从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出 ON 子句条件成立的记录,然后加上右表中剩余的记录

select * from student right join sc on student.sno = sc.sno

MySQL 常用 SQL 语句:插入更新删除查询

全外连接
以 JOIN 关键字左右两边的表为基准,没有匹配的记录则置 NULL。从笛卡尔积的角度讲就是从笛卡尔积中挑出 ON 子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。
mysql 不支持 full join,但可以通过左外连接 + union + 右外连接来实现(left join + union(可去除重复数据)+ right join)

#select * from student full join sc on student.sno = sc.sno
# 报错:[Err] 1054 – Unknown column ‘student.sno’ in ‘on clause’
select * from student left join sc on student.sno = sc.sno union select * from student right join sc on student.sno = sc.sno

语法格式:

select * from A left join B on A.id = B.id (where 条件)
union
select * from A right join B on A.id = B.id(where 条件);

c. 自然连接(使用 nature join)
自然连接就是 USING 子句的简化版,它找出两个表中相同的列作为连接条件进行连接。有左自然连接,右自然连接和普通自然连接之分。

select * from student nature join sc

d. 自身连接
顾名思义,自身连接就是一张表,自己和自己连接。(需要使用别名加以区分)

select * from student as student1, student as student2 where student1.sno = student2.sno and student1.sno = 218001

(2) 嵌套查询
首先引入一个查询块的概念,一个 SELECT…FROM…WHERE… 形式的 SQL 语句称为查询块。当一个查询块的 SELECT 子句或者 WHERE 子句中嵌套了另一个查询块的查询语句就称为嵌套查询。最外层的查询称为外层查询或父查询,最内层的查询称为内层查询或子查询。子查询用到了父查询的数据(表、字段)的情况称为相关子查询,相反,如果没用到就称为不相关子查询。通常嵌套查询与 IN、ALL、ANY、EXISTS 配合使用。

select sc.sno, sc.cno, sc.grade from sc where sc.sno in (select student.sno from student where student.sno = 218003)

(3) 集合查询
涉及 UNION、UNION ALL、INTERSECT、EXCEPT 的查询操作就称为集合查询。其中,UNION 和 UNION ALL 都会做并集,但 UNION 会去除重复的记录。最后,MySQL 不支持 INTERSECT 和 EXCEPT。

#student 表中性别为女 与 student 表中年龄大于 19 这两个查询结果作并集
select * from student where sex= ‘ 女 ’ union select * from student where age >19

MySQL 常用 SQL 语句:插入更新删除查询 

6. SQL 函数
(1) COUNT() 函数返回匹配指定条件的行数。

select count(*) from student
select count(sno) from student

7. 关于 limit

# 根据姓名排序,取第一条记录
select * from student order by sname limit 1
# 根据 id 倒序排序,取前 2 条记录
select * from student order by sno desc limit 2
# 从第 2 条记录往后,返回 1 条记录
select * from student limit 2, 1

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计4037字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中