sql语句表查询

2 篇文章 1 订阅

该文章收集了大部分的表查询语句

查看表中的信息
查询所有行和列的信息

SELECT * FROM 表名;

查询对应行的信息

SELECT 字段1, 字段2,字段3 FROM 表名;

有条件查询信息

SELECT * FROM 表名 where 条件;

where 后面不可以使用聚合函数作为条件

查询条件
常用条件

or #或者

and #且

xx in(?1,?2,?3) # xx为?1, ?2 或?3

字段 betweem ?1 and ?2 #等价于 >=?1 and<=?2

union 并查询

intersect 交查询

字段 is null #即字段为空的

字段 is not null # 即字段不为空的

SELECT   *  FROM  score WHERE s_score BETWEEN 80  AND  90;

ANY 任意

SELECT 字段 FROM 表名 where 字段数值 < ANY(SELECT 字段2 FROM 表名)

SELECT   null  FROM  tbl WHERE null	< ANY(SELECT  null FROM  tb2);

ALL 所有

SELECT 字段 FROM 表名 where 字段数值 < ALL(SELECT 字段2 FROM 表名)

exists 存在

SELECT 字段 FROM 表名 where 字段数值 < ANY(SELECT 字段2 FROM 表名)

not exists 不存在

DISTINCT 消重复

SELECT DISTINCT s_name FROM student #消去重复

模糊查询

字段 like ‘%a%’ #字段中存在a的

字段 like ‘a%’ #字段中a开头的的

% #匹配任意长度

_ #匹配一个长度的

a%b a开头 b结尾的任意长度

\ 转义为普通字符 如 \ _(无空隔)

排序查询

SELECT * FROM 表名 order by 字段 asc #从小到大

不写默认从小到大

SELECT * FROM 表名 order by 字段 desc #从大到小

复和查询

SELECT * FROM 表名 where like ‘%a%’ order by 字段 desc #包含a且从大到小排序

SELECT * FROM 表名 order by 字段1 desc , 字段2 ;#字段1从大到小且字段2从小到大

limit 查询 前n条信息

limit 0,10; LIMIT 10;

#查看前10条信息

limit 10;#查看10条后的10条记录

limit 20,10;#查看20条后10条记录

聚合查询

count(*) 统计个数

SELECT count(*) form 表名 #统计所有的

SELECT count(字段) form 表名 #统计字段的

SELECT sum(字段) form 表名#求和

SELECT AVG(字段),MAX(字段),MIN(字段),SUM(字段)/count(*) form 表名 # avg平均值

分组查询

SELECT 字段1,COUNT(*) FROM 表名 GROUP BY 字段1 ;#查出每个部门的人数

SELECT 字段1,COUNT(* ) FROM 表名 GROUP BY 字段1 ORDER BY COUNT(*) DESC;# 查出每个部门的人数 并按照 表名中的字段一的人数从高到低排序

我们拥有下面这个 “Orders” 表:

O_IdOrderDateOrderPriceCustomer
12008/12/291000Bush
22008/11/231600Carter
32008/10/05700Bush
42008/09/28300Bush
52008/08/062000Adams
62008/07/21100Carter

现在,我们希望查找每个客户的总金额(总订单)。

我们想要使用 GROUP BY 语句对客户进行组合。

我们使用下列 SQL 语句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

结果集类似这样:

CustomerSUM(OrderPrice)
Bush2000
Carter1700
Adams2000

很棒吧,对不对?

让我们看一下如果省略 GROUP BY 会出现什么情况:

SELECT Customer,SUM(OrderPrice) FROM Orders

结果集类似这样:

CustomerSUM(OrderPrice)
Bush5700
Carter5700
Bush5700
Bush5700
Adams5700
Carter5700
连接查询

SELECT * FROM 表名1 inner join 表名2 on 表名1(字段)= 表名2(字段);

SELECT * FROM 表名1 inner join 表名2 on 表名1(字段)= 表名2(字段) inner join 表名3 on 表名2(字段2)= 表名3(字段2);

SELECT   s.`s_id`,s.`s_name`,s.`s_birth`,s.`s_sex`,(SELECT   s_score FROM score WHERE score.`s_id`=s.`s_id`)youscore  FROM student s; 
SELECT S.`s_id`,s.`s_name`,s.`s_birth`,s.`s_sex`,sc.`c_name`,sc.`s_score`,course.`t_id` FROM student s INNER JOIN score sc ON s.`s_id`=sc.`s_id`INNER JOIN course ON sc.`c_name`=course.`c_name`
  

LEFT out join 左外连接

合并查询

SELECT * FROM 表名 union SELECT * FROM 表名2

SELECT * FROM 表名 union all SELECT * FROM 表名2

#表一中表二存在的

正则表达式查询

SELECT * FROM 表名 where 字段 regexp ‘条件’;

^X #以X开头

X$ #以X结尾

x.y #x和y之间有一个字符的字符串

. 任意一个 * 任意任意个

having 应用

– 统计每个部门的人数,要人数大于10的信息
SELECT department_id,COUNT() FROM employees
GROUP BY department_id HAVING COUNT(
)>10;

– where 与 having 的区别
– where 过滤筛选满足条件的记录
– having 对分组后的记录再次过滤筛选

去除重复 distinct

SELECT DISTINCT salary FROM employees ORDER BY salary;
SELECT DISTINCT employee_id,salary FROM employees ORDER BY salary;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zzsaixuexi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值