SQL DQL查询语句(一)

强调:对所有SLQ语句都是通用的,SQL语句以分号结尾(英文版;)

一、简单查询

1.查询一个字段

select 字段名 from 表名;

其中,select和from是关键字,字段名、表名是标识符。

举例:查询部门名

desc dept;

select dname from dept;

2.查询多个字段

使用逗号,隔开

desc dept;

select deptno,dname from dept;

3.查询所有字段

第一种方式:select 字段1,字段2,字段3 from 表名;

第二种方式:select * from ept;

第二种方式由于*需要转化为字段,所以运行效率低,可读性也不如第一种。

4.给查询到的列起别名

select deptno,dname as deptname from dept;

只是将查询到的列显示为deptname,原表列名还是叫dname没有变,select语句不会进行修改操作

as关键字可以省略,用空格代替。若别名中有空格,可将别名用单引号或双引号括起来,如'dept name'。

注意:在所有数据库中,字符串统一使用单引号括起来,是标准写法。双引号在MySQL中可以用,oracle中用不了。

5.列参与数据运算

select dname,sal*12 from dept;

字段可使用数学表达式,包括加减乘除等

结合起别名: select dname,sal*12 as '年薪' from dept;

二、条件查询

即只查询符合条件的数据,基础语法:

select 字段1,字段2,字段3 from 表名 where 条件;

1.比较

= 等于

select empno,dname from emp where sa l= 800;

select empno,sal from emp where dname='Smith';(可查询字符串)

<> 或者 !=   不等于

<小于

<=小于等于

>等于

>=大于等于

2.区间

between ... and ... 两个值之间,是闭区间,包含两端的值。等同于 >= and <=

注意:使用between ... and ...必须遵循左小右大

3.null

is null 和 is not null 数据为空/不为空

select empno,dname,sal,comm from emp where comm is null;

注意:这里必须用is,不能用=,在数据库中null不是一个值,不能使用等号衡量。

4.and  or 

and 并且

select empno,dname,sal,job from emp where job='Manager' and sal > 2500;

or 或者

select empno,dname,job from emp where job='Manager' or job='salesman';

注意:and优先级比or高,若想先执行or,需要加括号。如果不确定优先级,加小括号就行

例:找出工资大于2000,并且部门编号为10或20的员工,语句应为:

select * from emp where sal>2000 and (deptno=10 or deptno=20);

注意加括号,若不加括号,语句含义为找出工资大于2000,并且部门编号为10的员工,或者部门编号为20的员工。

5.in     not in 

in 包含,相当于多个or

select empno,dname,job from emp where job='Manager' or job='salesman';

该语句也可以写为:

select empno,dname,job from emp where job in ('Manager','salesman');

注意:in不是一个区间,in后面跟的是具体值。比如select dname,sal from emp where sal in (800,5000);该语句表示查询薪资是800或5000的员工,而不是找出薪资在800-5000之间的全部员工。

not in 不在这几个值当中

三、模糊查询

6.like

%表示匹配任意多个字符,下划线_表示匹配任意一个字符。

例:找出名字里面含有o的:

select ename from emp where ename like '%o%';

找出名字以K开头的:

select ename from emp where ename like 'k%';

找出名字以T结尾的:

select ename from emp where ename like '%T';

找出名字中第二个字母是A的:

select ename from emp where ename like '_A%';

找出名字中第三个字母是R的:(需两个下划线)

select ename from emp where ename like '__R%';

如果名字中带下划线,需使用转义符号\,如

select ename from emp where ename like '%\_%';

四、排序

1.单字段排序

查询员工姓名、薪资并排序:

select ename,sal from emp order by sal;

如需指定降序,则在sal后面加desc:select ename,sal from emp order by sal desc;

指定升序则将desc换成asc,默认是升序。

2.多字段排序

查询员工姓名,薪资。要求按照升序排序,如果薪资一样的话,再按照名字升序排列:

select ename,sal from emp order by sal asc,ename asc;

sal asc在前,表示先按照sal升序排列,只有sal相等才考虑用ename排序。

3.根据字段位置排序

select ename,sal from emp order by 2;

表示按照第二列(表中数据第二列是sal)排序。

注意:排序总是在最后,找出emp表中工资在1250到3000之间的员工信息,按工资降序排列:

select ename,sal from emp where sal between 1250 and 3000 order by sal desc;

五、对查询结果去除重复记录

7.distinct

例:select distinct job from emp;

select distinct job,deptno from emp;表示两个字段联合起来去重

可以统计去重后的数量,比如统计工作岗位的数量:select count(distinct job) from emp;

distinct关键字只能出现在所有字段的最前面,错误语句select ename,distinct job from emp; 错误信息显示为语法错误,因为distinct job是五条记录,ename是14条记录,无法匹配。

六、union合并查询结果

语句:select ename,job form emp where job='MANAGER' or job='SALESMAN';

使用union将MANAGER和SALESMAN的查询结果合并可以达到相同结果:

select ename,job from emp where job='MANAGER'

union

select ename,job from emp where job='SALESMAN';

使用union相较于表连接来说效率更高,这是因为加入a表10条数据,b表10条数据,c表10条数据,a连接b需查询10*10次,再连接c需查询10*10*10次。使用union的查询次数是10*10+10*10次。

注意:1.使用union合并查询结果时要求查询结果列数量一致,否则无法匹配。

2.MySQL中合并结果数据类型不一致也可以,但在oracle中会报错

例如:

select ename,job from emp where job='MANAGER'

union

select ename,sal from emp where job='SALESMAN';

七、limit取出一部分查询结果

通常使用在分页查询中,比如网页中一页显示10条查询结果,分页是为了用户体验,查询结果可以翻页看。

完整用法是 limit 起始下标,长度,比如 limit 0,5是指从第0个开始取5条记录,起始下标默认从0开始。也可使用limit 5表示取前5条记录。

案例:按照工资降序排列,取出前5名的数据?

select ename,sal from emp order by sal desc limit 5;

按照工资降序排列,取出3-5名的数据?

select ename,sal from emp order by sal desc limit 2,3;

其中2表示起始位置,即第三名,长度是第三名、第四名、第五名,总共3条记录。

分页操作:每页显示pagesize条记录,第pageno页,则参数应该是

 limit (pageno-1)*pagesize,pagesize

注意:limit在order by之后执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值