首页 👨‍💻计算机,🐋mysql

SQL查询语句详解(一)

一、基本语法

Select  select_list
From  table_name
Where  condition_expression
Group by  group_columns   
having condition_expression
Order by sort_columns

二、查询实例

  • 查询所有字段
  • 查询指定字段
  • 用DISTINCT去除结果中的重复行
  • 查询指定数据
  • 带有in关键字的查询
  • 带between and的范围查询
  • 带like的字符匹配查询

表1:学生

  • 结构

1594220915493

  • 数据

1594220880779

表2:商品表1

  • 结构:

1594221277593

  • 数据:

1594221302262

表3:商品表2

  • 结构:

1594221544814

  • 数据

1594221577891

表4:教师

  • 结构:

1594222422112

  • 数据

1594222512155

1594222571643

  • 数据分析需求

1)查询所有学生的详细信息

select * from 学生;

2)查询学生的学生号,姓名与专业

select 学生号,姓名,专业 from 学生;

3)从商品表1中查询出每一种商品的价值

select 商品代号,单价,数量,单价*数量 as 总价 from 商品表1;

4)从商品表1中查询每种商品的分类名 去除重复项

select distinct 分类名 from 商品表1;

5)从商品表1中查询出分类名为"电视机"的所有商品

select * from 商品表1 where 分类名 ='电视机';

6)从商品表1中查询出单价低于2000元的每一种商品代号,分类名和单价

select 商品代号,分类名,单价 from `商品表1`  where 单价<2000;

7)从商品表2中查询出产地为北京、山西、无锡的所有商品

select * from 商品表2 where 产地='北京' or 产地='山西' or 产地='无锡';
select * from 商品表2 where 产地 in('北京','山西','无锡');

8)从商品表1中查询出商品代号以字符串"dsj"开头的所有商品 (考察模糊查询like以及通配符)

select * from 商品表1 where 商品代号 like 'DSJ%';

9)从商品表1中查询单价在1000到2000之间的所有商品

select * from 商品表1 where 单价 between 1000 and 2000;

10)查询所有姓张的学生的详细信息

select * from 学生 where 姓名 like '张%';

11)从商品表1中查询出单价大于1500,同时数量大于等于10的商品

select * from 商品表1 where 单价>1500 and 数量>=10;

12)从教师表中查询联系电话为空的教师信息

select * from 教师 where 联系电话 is null;

13)从选课表中查询按课程号的升序,同一课程按成绩降序排列

select*from 选课 order by 课程号 asc, 课程号 desc;

14)从学生表中查询各个专业的人数

select 专业,count(*) as 人数 from 学生 group by 专业

15)从学生表中查询出专业的学生数多于1人的专业名及人数

select 专业,count(*) as 人数 from 学生 group by 专业 having count(*)>1
select 专业,count(*) as 人数 from 学生 group by 专业 having 人数>1

16)从选课表中查询成绩最高前三位

select * from 选课 order by 成绩 desc limit 3

17)查询各个专业男女人数各是多少

select 专业,性别,count(*) as 人数 from 学生 group by 专业,性别

18)从商品表1中查询出所有商品的最大数量、最小数量、平均数量及数量总和

select 分类名,
max(单价) as 最高价,
min(单价) as 最低价,
avg(单价) as 平均价
from 商品表1

19)从商品表1中查询出分类名为“电视机”的商品的种数、最高价、最低价及平均价

select 分类名,
max(单价) as 最高价,
min(单价) as 最低价,
avg(单价) as 平均价
from 商品表1 where 分类名='电视机'

20)查询出产地为南京或无锡的所有商品的商品代号、分类名、产地和品牌

select a.商品代号,b.分类名,a.产地,a.品牌 from 商品表2 a,商品表1 b
where a.商品代号=b.商品代号 and a.产地 in('南京','无锡')

select a.商品代号,b.分类名,a.产地,a.品牌 from 商品表2 a
inner join 商品表1 b on a.商品代号=b.商品代号 where a.产地 in('南京','无锡')

21)从教学库中查询出选修了课程名为“操作系统”课程的每个学生的姓名

select b.姓名,c.课程名 from 选课 a
inner join 学生 b on a.学生号=b.学生号
inner join 课程 c on a.课程号=c.课程号 where c.课程名='操作系统'

select b.姓名,c.课程名 from 选课 a,学生 b,课程 c
where a.学生号=b.学生号 and a.课程号=c.课程号 and c.课程名='操作系统'

22)从教学库中查询出所有学生的选课情况,要求没选修任何课程的学生信息也要
反映出来(左,右连接)

23)从教学库中查询出选修了课程名为“操作系统”的所有学生(带in的子查询)

24)查询出比所有商品单价的平均值要高的全部商品(比较运算符)

select * from 商品表1 where 单价>(select avg(单价) from 商品表1)

25)从教学库中查询出选修至少一门课程的所有学生(带exists(的子查询)

select * from 学生
where exists(select * from 选课 where 选课.学生号=学生.学生号)

26)从教学库中查询出选修了课程名为“C++语言“的所有学生的姓名和成绩(any子查询)

select b.姓名,c.课程名,a.成绩 from 选课 a
inner join 学生 b on a.学生号=b.学生号
inner join 课程 c on a.课程号=c.课程号 where c.课程名='C++语言'

select 姓名,成绩 from 学生 join 选课 on 学生.学生号=选课.学生号
where 课程号=any(select 课程号 from 课程 where 课程名='C++语言')

27)从商品表1中查询出单价比分类名为 “洗衣机”的所有商品单价都高的商品

#一
select * from 商品表1 where 单价>all(select 单价 from 商品表1 where 分类名='洗衣机')
#二
select * from 商品表1 where 单价>(select max(单价) from 商品表1 where 分类名='洗衣机')

28)从商品表1中查询出单价比分类名为“洗衣机”的所有商品的单价 其中一种 高的商品

select * from 商品表1 where 单价>any(select 单价 from 商品表1 where 分类名='洗衣机') and
not 分类名='洗衣机

29)查询出每种商品的总价值,并按降序排列

select 分类名,sum(单价*数量) as 总价值 from 商品表1 group by 分类名 order by 总价值 desc 

30)查询至少选修了王明所选修的所有课程的学生

select * from 学生 where 姓名!='王明' and 学生号 in (
select 学生号 from 选课
where 课程号 in (select 课程号 from 选课,学生 where 选课.学生号=学生.学生号  
and 姓名='王明') group by 学生号 having count(*)=(select count(*)  from 选课,学生
where 选课.学生号=学生.学生号  and 姓名='王明'))

31)查找选择了课程编号为101和102的学生,把其学号显示出来

select a.*,b.课程名称 from 选课成绩 a,课程2 b where a.课程编号=b.课程编号 and a.课程编号=102
union
select a.*,b.课程名称 from 选课成绩 a,课程2 b where a.课程编号=b.课程编号 and a.课程编号=101

32)把test1和test2表的数据合并在一起

select * from test1
union
select * from test2

三、其他补充

33)创建如下表并插入测试数据

要求对此表查询,显示如下结果:

显示结果:

 姓名  语文  高数  英语
 李勇   90   70    80
 刘晨   60   77    96
select score from grade where subject='语文' and name=a.name
select score from grade where subject='英语' and name=a.name
select score from grade where subject='高数' and name=a.name
select distinct name 姓名,语文,英语,高数 from grade a
思路先将语文,英语,高数显示出来,分别为三张表,然后给他们加上别名
select distinct name 姓名,
(select score from grade where subject='语文' and name=a.name) 语文,
(select score from grade where subject='英语' and name=a.name) 英语,
(select score from grade where subject='高数' and name=a.name) 高数
from grade a

求出单价最高和库存量最高

select id,name,concat('最高单价:',price) `最高单价/最大库存` from easybuy_product where
 price=(select max(price) from easybuy_product)
union
select id,name,concat('最大库存:',stock) from easybuy_product where 
stock=(select max(stock) from easybuy_product)



文章评论

目录