SQL基本语句 DQL select与提取 DML插入删除

本文详细介绍了SQL语句的四大类别:DDL、DML、DQL和DCL,重点讲解了DQL的查询操作,包括基本查询、条件筛选、分组聚合、子查询以及多表连接查询等。同时,文中提到了SQL的排序、分页和数据操作,如INSERT、DELETE和UPDATE,并探讨了子查询在WHERE和HAVING子句中的应用。此外,还涵盖了外连接查询和数据的拼接操作。
摘要由CSDN通过智能技术生成

SQL语句大体分为四类:

1) DDL:数据定义语言,创建、删除、修改数据库、数据表的。

2) DML:数据管理语言,对数据表中的数据进行增加、删除、修改操作。

3) DQL:数据查询语言,对数据表中的数据进行查询操作。

4) DCL:数据控制语言,对数据库的权限、角色等进行操作。

这里首先写一下DQL语句

简单查询

最简单的select

select 字段列表 from 表名 

字段与表改名

select 字段名 as 别名, 字段名 as 别名 from 表名 as 别名

where

对查询记录进行筛选。只有符合筛选条件的记录,才会出现在查询结果中。

1) 比较运算符

运算符 作用

“>” 大于
“>=” 大于等于
"<"小于
“<=” 小于等于
“=” 等于
“!=,<>” 不等于
null值不会参与比较运算

2) 逻辑运算符

运算符 作用

and 逻辑与
or 逻辑或
not 逻辑非

3) Null值的判断

运算符 作用

is null 字段为null
is not null 字段不为null

4) between…and…

判断范围,闭区间。
相当于 字段 >= 值 and 字段 <=值。

5) 模糊查询

字段 like '规则'
规则: %表示任意多个任意字符,_表示任意的一个字符。

SQL不区分大小写的,like,=都不区分大小写。

6) in

字段 in (,,...)
字段 not in (,,...)
分组查询

使用group by 在查询到的数据中,进行分组,指定字段相同的记录会被合并为一组。

group by 字段名, ...
group by 1, 2, ...  // 字段的下标,从1开始

distinct
合并重复数据,将指定字段值相同的记录合并为一条记录。

只能显示合并的列的数据。

聚合函数
聚合函数 作用
count() 统计数量, count(*),count(1)统计查询结果的总数,count(字段)统计查询结果中字段的数量,会忽略null值
sum() 求和
avg() 求平均值
max() 求最大值
min() 求最小值
可以对查询结果进行聚合运算,也可以与分组进行联用,此时以组为单位进行聚合。

聚合函数在运算时会忽略null值。

having

having后面跟的也是条件,与where不同,having的条件是在分组之后进行筛选。

Select执行的过程:

1) 先从表中根据Where提取数据。

2) 再进行分组。

3) 分组后,再进行having筛选。

having和where的区别:

1) 语法: where写在group by 的前面,having是写在group by的后面。

2) 执行: where先执行,having是在分组后执行。

3) 聚合: where不能与聚合函数联用,having可以。

注意:group by 可以没有,where 后面也可以跟having。

order by
对查询结果进行排序。

order by 字段 asc/desc, 字段 asc/desc…
1) asc表示升序,desc降序,asc可以省略。

2) 排序时可以有多个字段,首先按照第一个字段进行排序,当第一字段值存在相同时,这时才按第二字段进行排序。

limit
对查询记录进行截取。

limit n // 从下标为0的记录提取,总共提取n条记录
limit m, n // 从下标为m的记录提取,总共提取n条记录
limit常用于对查询数据进行分页。

子查询

在一个SQL语句中,又包含了另一个SQL语句。

insert
insert into 表名 (字段列表) select …
子查询的字段,必须与插入字段一一对应,不要求名字对应。

delete
delete的子查询包含在where子句中。

update
updeta的子查询包含在where子句中。

select
作为查询字段
select 字段列表, (select …) from 表名;
要求:

1) 子查询,最多只能返回一条结果。

2) 子查询,最多只能有一个列。

子查询代替表
select 字段列表 from (select …) as 别名;
注意:子查询必须给一个别名。

where 中使用子查询
1) in

where 字段 in (select …)
where 字段 not in (select …)
子查询只能返回一个列。

先执行子查询,再执行父查询。

2) exists 存在

where exists (子查询)
where not exists (子查询)
子查询中可以使用父查询的字段进行判断。

先执行父查询,将每一条要筛选的记录,带入到子查询,

如果子查询的结果为空,则父查询的记录不满足条件。

如果子查询的结果不为空,则父查询的记录满足条件。

先执行父查询,再执行子查询。每检查一条父查询中的记录,都会执行一次子查询。

因此,这个查询效率很低。

3) any,all,some

select 字段列表 from 表名
where 字段 比较运算符 any/all/some (select …)
多表连接查询
交叉连接/等值连接
select * from 表1, 表2
where 表1.字段 = 表2.字段
上述操作得到的是两个表记录的迪卡尔乘积。

内连接

select * from 表1
inner join 表2 on 连接条件
inner 是可以省略的。

内连接
内连接,即最常见的等值连接(Sql92标准),例:
SELECT * FROM TESTA,TESTB WHERE TESTA.A=TESTB.A
外连接

在使用内连接和交叉连接时,只有两个表中有对应数据的记录,才会出现在查询结果中。

外连接在进行连接查询时,可以保证主表中的记录,无论在从表中是否有对应记录,都会出现在查询结果中。

如果在从表中没有对应记录,这时将使用null值填充从表中的所有数据。

左外连接
select 字段列表 from 主表
left outer join 从表 on 连接条件

select 字段列表 from 主表
left outer join 从表 on 连接条件
左连接时,左表是主表,右表是从表。

outer也是可以省略。

右外连接
select 字段列表 from 从表
right outer join 主表 on 连接条件
当统计数据时,有一个表中的所有的记录都必须出现在查询结果中,这时必须得用外连接。

查询结果的拼接
select …
union / union all
select …
union拼接时,会合并相同的记录。

union all拼接时,不会合并相同的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不惭_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值