1. 无条件查询
- --查询表中所有数据
- select * from 表名;
复制代码 2. 查询在…到…之间(between and / && / and)
- --查询users表中年龄在18~25岁之间的记录
- --方式1 between..and..
- select * from users where age between 18 and 25;
- --方式2 &&
- select * from users where age>=18 && age<=25;
- --方式3 and
- select * from users where age>=18 and age<=25;
复制代码 3. 指定条件查询
- 单个条件(or / in)
- --查询users表中年龄为18,20,25岁的记录
- --方式1 or
- select * from users where age=18 or age=20 or age=25;
- --方式2 in
- select * from users where age in (18,20,25);
复制代码 - 多个条件(and)
- --查询users表中年龄为23,性别为女,名字为小楠的记录
- select * from users where age=23 and gender='女' and name='小楠';
复制代码 4. 查询不为NULL值(is not null),为NULL值(is null)
- --查询users表中序号不为空的记录
- select * from users where id is not null;
- --查询user表中序号为空的记录
- select * form users where id is null;
复制代码 5. 暗昧查询(like)
- _:单个任意字符
- %:多个任意个字符
- --查询users表中姓名第一个字为李的记录
- select * from users where name = '李%';
- --查询users表中姓名第二个字为李的记录
- select * from users where name = '_李%';
- --查询users表中姓名含有李字的记录
- select * from users where name = '%李%';
- --查询users表中姓名是两个字的记录
- select * from users where name = '__';
复制代码 6. 去除重复记载查询(distinct)
- --查询users表中所在城市不相同的记录
- --select distinct 字段 from 表名;
- select distinct city from users;
复制代码 7. 排序查询(order by)
- 单个条件
- --查询users表中记录,并以年龄升序排序
- select * from users order by age;
-
- --查询users表中记录,并以年龄降序排序
- select * from users order by age desc;
复制代码 - 多个条件
注意:多个排序条件时,只有当第一个排序条件值一样,才会实行第二个排序条件,以此类推
- --查询users表中记录,并体育成绩降序,年龄降序
- select * from users order by PE desc, age desc;
复制代码 8. 聚合函数
- 计算和(sum)
- select sum(字段) (as sumvalue) from 表名;
复制代码 - 计算最大值(max)
- select max(字段) (as maxvalue) from 表名;
复制代码 - 计算最小值(min)
- select min(字段) (as minvalue) from 表名;
复制代码 - 计算均匀值(avg)
- select avg(字段) (as avgvalue) from 表名;
复制代码 - 计算个数(count)
- select count(字段)(as totalcout) from 表名;
复制代码 9. 分组查询(group by)
- --查询users表中的记录,按照性别分组,查询男,女的体育成绩平均分
- select gender,avg(PE) from users group by gender;
- --查询users表中的记录,按照性别分组,分别查询男、女的体育成绩平均分,人数
- select gender,avg(PE),count(id) from users group by gender;
- --查询users表中的记录, 按照性别分组,分别查询男、女的体育成绩平均分,人数 要求:分数低于60分的人,不参与分组
- select gender,avg(PE),count(id) from users where PE>60 group by gender;
- --查询users表中的记录,按照性别分组,分别查询男、女的体育成绩平均分,人数 要求:分数低于60分的人,不参与分组,分组之后,人数要大于2个人
- select gender,avg(PE),count(id) from users where PE>60 group by gender having count(id)>2;
复制代码 10. 分页查询(limit)
注意:第一条记载的索引是0
- --查询users表中的前10行条记录
- select * from users limit 10;
- --查询users表中第2~11条记录 (从第2条记录开始累加10条记录)
- select * from users limit 1,10;
- --查询users表中第5~17条记录 (从第5条记录开始累加13条记录)
- select * from users limit 4,16;
复制代码 11. 内连接查询
如果查询数据的泉源来自多张表,则必须对这些表进行连接查询,连接是把不同表的记载连到一起的最普遍的方法,通过连接查询可将多个表作为一个表进行处理,连接查询分为内连接和外连接
语法格式
- --语法1 (隐式内连接)
- select 字段1,字段2...
- from 表1,表2...
- where 过滤条件;
-
- --语法2 (显式内连接)
- select 字段1,字段2...
- from 表1 inner join 表2 ...
- on 过滤条件;
复制代码 e.g 有两张表:user表和city表
user表:
idname001小红002小蓝003小白004小黄005小绿006小青 city表:
idaddress001深圳002广州003北京004上海005汕头006潮州007揭阳 重合的部分就叫做内连接查询,例如下面过滤条件指的就是当两个表的id相称时才符合连接查询的条件
- 隐式内连接
- select user.name,city.address
- from user,city
- where user.id = city.id;
复制代码 效果为:
nameaddress小红深圳小蓝广州小白北京小黄上海效率汕头小青潮州
- 显式内连接
- select user.name,city.address
- from user inner join city
- on user.id = city.id;
复制代码 12. 外连接查询
外连接查询分为左外连接查询和右外连接查询
语法
- --左外连接
- select 字段1,字段2..
- from 表1 left outer join 表2 on 过滤条件;
- --右外连接
- select 字段1,字段2..
- from 表1 right outer join 表2 on 过滤条件;
复制代码 左外连接和右外连接有一点区别:
左外连接:是表1和表2的交集再并上表1的其他数据
右外连接:是表1和表2的交集再并上表2的其他数据
e.g: 上面两张表的左外链接效果
- select user.name,city.address
- from city left outer join user
- on user.id = city.id;
复制代码 效果为:
nameaddress小红深圳小蓝广州小白北京小黄上海效率汕头小青潮州NULL揭阳 简朴点说就是求交集之后并上city的其他数据,没有匹配的为NULL
右外连接效果:
- select user.name,city.address
- from city right outer join user
- on user.id = city.id;
复制代码 效果为:
nameaddress小红深圳小蓝广州小白北京小黄上海效率汕头小青潮州 简朴点说就是求交集之后并上user的其他数据,没有匹配的为NULL
13. 子查询
当我们进⾏语句查询的时候,总会遇到我们需要的条件需要通过另⼀个查询语句查询出来后才气进⾏,就是说A 查询语句需要依赖B 查询语句的查询效果,B 查询就是⼦查询,A 查询语句就是主查询,⼀个SQL语句可以包罗多个⼦查询。
语法
- select username
- from user
- where age =(
- select avg(age)
- from userInfo
- )
复制代码 例如:要查询工资大于10号部分的均匀工资的非10号部分的员工信息
查询10号部分的均匀工资
- select avg(sal) from emp where deptno = 10;
复制代码 那么工资大于10号部分的均匀工资的非10号部分的员工信息为
- select * from emp
- where deptno!=10 and sal>(
- select avg(sal)
- from emp
- where deptno = 10;
- )
复制代码 一些子查询的实例
查询在2022年8月9日销售的产品信息
- select *
- from dbo.product
- where pno in (
- select pno from dbo.prd
- where odate = '2022/'
- )
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |