【数据库】3.基础DQL语句的编写
查询语句的结构
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
简单查询语句(DQL)
基础查询语句:
SELECT col1,col2,col3,col4... FROM tbname;
从tbname
表查询上述多个字段的值。
SELECT * FROM tbname;
从tbname
表中查询所有数据。(实际开发中不建议使用星号,因为查询效率较低)
数学运算和重命名:
SELECT col1,col2 * 10 AS newcol FROM tbname;
执行该条语句的查询结果中,所有查得数据中col2
的数值将被乘以10,得到的字段重命名为newcol
注意:
- 任意一条SQL语句以
;
结尾,且SQL语句不区分大小写。 - 若要将字段重命名为中文的话,需要将新字段名用单引号括住
as '新字段名'
。
条件查询语句
基础条件查询语句:
SELECT <colname> FROM <tbname> WHERE <condition>;
条件查询的语句执行顺序:from -> where -> select
--从emp中找出所有sal > 200的数据的ename
select ename from emp where sal > 200;
--从emp找出所有sal不等于200的数据的ename
select ename from emp where sal <> 200;--sql特有的运算符
select ename from emp where sal != 200;
--从emp中查找ename为'tom'的数据的sal
select sal from emp where ename = 'tom';
Between…and..语句
--找出sal在200-300之间(包括200和300)的数据的ename
select ename from emp where sal >= 200 and sal <= 300;
select ename from emp where sal between 200 and 300;--记住between...and...用在数值时是闭区间!!
--找出ename首字母在'A'到'C'之间(包含'A',不包含'C')的ename
select ename from emp where ename >= 'A' and ename <= 'C'; --写<='C'和<'C'的查询结果一致
select ename from emp where ename between 'A' and 'C';--between and 用在字符是左闭右开
in关键字
in
后接数个查询关键词,用于查询条件字段符合其中某个关键词的数据。
--找出sal是1000或者2000的ename
select ename from emp where sal = 1000 or sal = 2000;
select ename from emp where sal in (1000,2000);
distinct关键字
distinct
后接需要去重的字段名。可以去除重复字段
--找出emp中所有不同的job
select distinct job from emp;
select job from emp group by job;
--找出emp中不同deptno中不同的job
select distinct deptno,job from emp;-- deptno和job联合去重,查询结果中不会出现deptno和job均相同的数据项
--统计job的数量
select count(distinct job) from emp;-- 只会计数不同的job
判断是否为空
--找出sal为空的ename
select ename from emp where sal is null;
--找出sal不为空的ename
select ename from emp where sal is not null;
--找出deptno为20并且sal为0或者为空的ename
select ename from emp where deptno = 20 and (sal is null or sal = 0);
模糊查询
SELECT <colname> FROM <tbname> WHERE <condition_col> LIKE <condition>
在模糊查询当中,需要掌握两个特殊的字符:
%
代表任意多个字符_
代表任意一个字符。 若需要查找这两个字符,需要加反斜杠\
转义。
like关键字
--找出ename中含有O的所有ename
select ename from emp where ename like '%O%';
--找出ename中第二个字符为A的所有ename
select ename from emp where ename like '_A%';
--找出ename最后一个字符为A的所有ename
select ename from emp where ename like '%A';
--找出ename中含有下划线的ename
select ename from emp where ename like '%\_%';
排序输出
SELECT <colname> FROM <tbname> ORDER BY <sortkey_col> <order=asc>;
其中,最后的<order>
有两种取值:
asc
表示升序desc
表示降序
可以同时设置多个排序关键字,靠前的排序关键字将被看作主要排序关键字。
该条的语句执行顺序:from -> where -> select -> order by
注意:ORDER BY
默认为升序排序
--根据sal升序排序,查询emp表里的ename和sal
select ename,sal from emp order by sal;
select ename,sal from emp order by 2;--这里的2,指查询字段的第二个,也就是sal
select ename,sal from emp order by sal asc;
select ename,sal from emp order by 2 asc;
--根据sal降序排序,查询emp表里的ename和sal
select ename,sal from emp order by sal desc;
--根据sal降序排序,当sal相同时,根据ename升序排序
select ename,sal from emp order by sal desc,ename asc;--sal为主要关键字
分页查询
limit
可以用于取查询结果中的部分数据,语法如下:
SELECT <colname> FROM <tbname> ORDER BY <sortkey_col> <order=asc> LIMIT <startindex=0> , <length>;
limt
的执行在order by
之后。
--查询sal前五名的ename
select ename from emp order by sal desc limit 0,5;
select ename from emp order by sal desc limit 5;
--查询sal第4到第9名的ename
select ename from emp order by sal desc limit 3,6;
limit
可以进行分页,如需要结果每页显示pagesize
条记录,则第pageNo
页的内容范围就是:
limit (pageNo-1)*pagesize , pagesize
如每页5条,第2页的内容范围就是:limit (2-1)*5 , 5