数据查询语言DQL(data query language)
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:
SELECT <字段列表>FROM <表或视图名>WHERE <查询条件> order by 排序列表;
- 查询字段
select columna from tablea;
- 查询常量值
select 100;
select 'john';
- 查询表达式
select 100*28 as 结果;
- 查询函数
select version();
- 别名
别名可以用as,空格,如果别名含有关键字或者特殊符号,用引号引起来
select columna as a,columnb b,columnc 'c# put' from table;
- 去重
select distinct columna from tablea;
- +号只有运算符的功能,如果想连接,需要使用concat函数
select 1+2;--3
select CONCAT('a','b','c') as 结果;--abc
-
筛选条件
条件表达式 > < = != <> >= <=
逻辑表达式 && || !, and or not
模糊查询 like, between and,in,is null
安全等于 <=>,相当于is null跟=; -
排序
排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合
默认是升序 asc,降序 desc
-- 对时间差求和
SELECT
sum( times ) ,count(*)
FROM
(
SELECT
TIMESTAMPDIFF( SECOND, a.begin_running_time, a.end_time ) AS times
FROM
manager.td_jobs a,
AND a.start_time > '2021-01-18 18:00'
) t;
分页查询
select * from table limit (pageNum-1)*pageSize,pageSize
查询第1条到第10条数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;
查询第10条到第20条数据的sql是:select * from table limit 10,20; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;
连接查询
SQL92
- 等值 where 后加相等的条件,a.column=b.column
- 非等值 where 后加不等的条件,
- 自连接 from tablea a,tablea b
- 也支持一部分外连接(用于oracle、sqlserver,mysql不支持)
SQL99【推荐使用】
- 内连接 表1【inner】 join 表2 on 连接条件
等值 where 后加相等的条件,a.column=b.column
非等值 where 后加不等的条件,
自连接 - 外连接 表1 left|right|full【outer】 join 表2 on 连接条件
左外 (左边是主表,显示主表的所有行)
右外
全外(mysql不支持)
mysql 不支持 直接写full outer join 或者 full join来表示全外连接但是可以用left join union right join 代替。 - 交叉连接
select 列 from 表1 cross join 表2 ; – 得到笛卡尔积,没什么意义
语法
select 查询列表 as 别名 --⑦
from 表1 别名 – ①
连接类型 join 表2 – ②
on 连接条件 – ③
where 筛选 – ④
group by 分组列表 – ⑤
having 筛选 – ⑥
order by 排序列表 --⑧
limit 起始条目索引 --⑨