MySQL 查寻的相关例题——查询

查询 检查 检索 都用查询语句
最简单的查询语句 SELECT FROM
创建表

单表查询

一、用*代表所有列、查询具体的列

  1. 查询student 表的所有信息
    SELECT *
    FROM student
  2. 查询所有学生的学号姓名
    SELECT ALL sno,sname
    FROM student
  3. 查询所有女生的信息
    SELECT *
    FROM student
    WHERE sex=‘女’
  4. 查询王老师所授课的课程信息
    SELECT *
    FROM course
    WHERE teacher=‘王老师’

二、where子句中带比较运算符的查询条件、用and或or连接条件

  1. 查询年龄小于18岁的女生的学号和姓名
    SELECT sno,sname
    FROM student
    WHERE sage<18 AND sex=‘女’
  2. 查询年龄小于18或籍贯是河南郑州的学生学号姓名
    SELECT sno,sname
    FROM student
    WHERE sage<18 OR home=‘河南郑州’

三、where子句中带in的查询。

  1. 查询王老师、刘老师、李老师所教授的课程号课程名
    SELECT cno,cname
    FROM course
    WHERE teacher IN (‘王老师’,‘刘老师’,‘李老师’)

四、空值查询null或not null

  1. 查询cpno为空的课程号和课程名
    SELECT cno,cname
    FROM course
    WHERE cpno IS NULL
  2. 查询home为空的学生学号和姓名
    SELECT sno,sname
    FROM student
    WHERE home IS NULL

五、between…and…

  1. 查询年龄在16到20岁之间的学生的学号和姓名
    SELECT sno,sname
    FROM student
    WHERE sage BETWEEN 16 AND 20
  2. 查询学分在3到6分之间的课程号、课程名、学分
    SELECT cno,cname,credit
    FROM course
    WHERE credit BETWEEN 3 AND 6

六、模糊查询

  1. 查询所有姓刘的学生信息。
    SELECT *
    FROM student
    WHERE sname LIKE ‘刘%’
  2. 查询COURSE表中第二个字为据的课程信息。
    SELECT *
    FROM course
    WHERE cname LIKE ‘_据%’
  3. 查询所有姓刘、李、王的学生信息。
    SELECT *
    FROM student
    WHERE sname LIKE ‘刘%’ OR sname LIKE ‘李%’ OR sname LIKE ‘王%’
  4. 查询姓名由5个字母组成的学生姓名和学号。
    SELECT sname,sno
    FROM student
    WHERE sname LIKE ‘_____’
  5. 查询姓名中有乐字的学生学号和姓名。
    SELECT sname,sno
    FROM student
    WHERE sname LIKE ‘%乐%’

七、消除重复的元组distinct

  1. 查询sc表的sno列。
    SELECT DISTINCT sno
    FROM sc

八、对查询结果进行排序

  1. 查询20102学生的选修信息并按成绩的降序输出。
    SELECT *
    FROM sc
    WHERE sno=‘2012’
    ORDER BY score DESC, cno DESC

九、聚合函数(集函数)

  1. 查询20101学生的总成绩和平均成绩。
    SELECT sno 学号 SUM(score) 总分, AVG(score) AS 平均分
    FROM sc
    WHERE sno=‘20101’
  2. 查询20102学生的最高成绩和最低成绩。
    SELECT sno 学号,MAX(score) 最高分,MIN(score) 最低分
    FROM sc
    WHERE sno=‘20102’
  3. 查询选课人次。
    SELECT COUNT (sno)
    FROM sc
  4. 查询选课人数。
    SELECT COUNT (DISTINCT sno)
    FROM sc

十、分组查询

  1. 查询每个学生的总成绩和平均成绩。
    SELECT SUM(score) 总成绩, AVG(score) 平均成绩
    FROM student
    GROUP BY sno
  2. 查询平均成绩大于90分的学生学号和平均成绩。
    SELECT sno 学号, AVG(score) 平均分
    FROM sc
    GROUP BY sno
    HAVING AVG(score)>90
  3. 查询每门课程的选课人数。
    SELECT cno 课程号, COUNT (sno) 选课人数
    FROM sc
    GROUP BY cno

十一、显示查询结果中的部分元组(limit)

  1. 查询所有姓刘的学生信息,且只显示前4条记录。
    SELECT *
    FROM student
    WHERE sname LIKE ‘刘%’
    LIMIT 4
  2. 输出STUDENT表的第3行到第10行的记录。
    SELECT *
    FROM student
    LIMIT (2,8)

多表查询

一、使用 UNION 、 UNION ALL 合并查询

  1. 查询student 表和sc表的sno列
    SELECT sno
    FROM student
    UNION
    SELECT sno
    FROM sc 消除了重复数据

SELECT sno
FROM student
UNION ALL
SELECT sno
FROM sc
UNION 、 UNION ALL的区别:UNION消除了重复数据

二、笛卡尔积(cross join)交叉连接(列相加,行相乘)

  1. 查询student表 sc表的笛卡尔积
    SELECT *
    FROM student CROSS JOIN sc

三、内连接和多表连接、子查询

  1. 查询选修了c101课程的学生的学号和成绩
    SELECT sno,score
    FROM sc
    WHERE cno=‘c101’
  2. 查询选修了c101课程的学生的学号和姓名
    法一:SELECT student.sno,sname
    FROM student INNER JOIN sc ON studnet.sno=sc.sno
    WHERE cno=‘c101’ (内连接)

法二:SELECT sc.sno,sname
FROM student,sc
WHERE student.sno=sc.sno AND cno=‘c101’ (多表连接)
法三:
SELECT sno,sname
FROM student
WHERE sno IN(SELECT sno
FROM sc
WHERE cno=‘c101’) (嵌套连接)

  1. 查询20101号学生所选修的课程号和课程名
    法一:SELECT course.cno,cname
    FROM course INNER JOIN sc ON course.cno=sc.cno
    WHERE sno=‘20101’

法二:SELECT sc.cno,cname
FROM course,sc
WHERE course.cno=sc.cno AND sno=‘20101’

法三:
SELECT cno,cname
FROM course
WHERE cno IN(SELECT cno
FROM sc
WHERE sno=‘20101’)

  1. 查询选修了数据结构课程的学生的学号
    法一:SELECT sno
    FROM course INNER JOIN sc ON course.cno=sc.cno
    WHERE cname=‘数据结构’

法二:SELECT sno
FROM course,sc
WHERE course.cno=sc.cno AND cname=‘数据结构’

法三:
SELECT sno
FROM sc
WHERE cno IN (SELECT cno
FROM course
WHERE cname=‘数据结构’)

  1. 查询选修了数据结构课程的学生的学号和姓名
    法一:SELECT student.sno,sname
    FROM student JOIN sc ON student.sno=sc.cno JOIN course ON sc.cno=course.cno
    WHERE cname=‘数据结构’

法二:SELECT sc.sno,sname
FROM student,sc,course
WHERE student.sno=sc.cno AND sc.cno=course.cno AND cname=‘数据结构’

法三:
SELECT cno
FROM course
WHERE cname=‘数据结构’
SELECT sno,sname
FROM student
WHERE sno IN (SELECT sno
FROM sc
WHERE cno IN (SELECT cno
FROM course
WHERE cname=‘数据结构’))

四、自然连接(natural)

  1. 查询sc表和student表的自然连接的结果
    SELECT *
    FROM sc NATURAL JOIN student (自然连接)

SELECT *
FROM sc JOIN student ON sc.cno=student.sno (内连接/等值连接)

等值连接有重复的属性列 自然连接没有重复的属性列

  1. 查询sc表和course表的自然连接的结果
    SELECT *
    FROM sc NATURAL JOIN course

五、自连接

  1. 查询和李思远同学同岁的学生学号和姓名
    法一:SELECT sno,sname
    FROM student
    WHERE sage=(SELECT sage
    FROM student
    WHERE sname=‘李思远’
    )
    子查询,也叫嵌套查询

法二:SELECT s2.sno,s2.sname
FROM student s1,student s2
WHERE s1.sage=s2.sage AND s1.sname=‘李思远’ AND s1.snam!=‘李思远’

六、外连接

  1. 查询sc表和student表的左外连接、右外连接
    LEFT OUTER JOIN
    RIGHT OUTER JOIN

SELECT *
FROM sc LEFT OUTER JOIN student ON sc.sno=student.sno

SELECT *
FROM sc RIGHT OUTER JOIN student ON sc.sno=student.sno

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值