数据库DQL数据查询语言

DQL数据查询语言

DQL是用于查询表中数据的语言。
常用的语法语句有:

SELECT 子句
FROM 子句
WHERE 子句
JOIN...ON...子句
GROUP BY 子句
HAVING 子句
ORDER BY子句

一条DQL语句至少要包含的两个子句分别是SELECT子句和FROM子句

  • SELECT子句用于指定查询的字段名称。选定的字段会体现在查询结果集中
  • FROM子句用于指定数据来自那些表(指定查询的表)

1.基础查询:SELECT子句和FROM子句

由SELECT和FROM构成。

1.1 语法:

  • SELECT子句和FROM子句

    SELECT 字段1[,字段2,字段3,...]
    FROM1[,2,3...]
    
  • SELECT子句中可以使用*表达查询所有的字段

    实际开发中不推荐使用,因为查询低效*

查询teacher表中的所有数据
SELECT * FROM teacher
上述SQL执行时,数据库会先解析"*",这个操作会导致数据库先查看内部数据字典了解表的字段后
才能查看表中数据。由于查询是非常频繁的操作,因此每次查看数据字段无疑是浪费性能且消耗时间的操作!
全字段查询时应当在SELECT子句中将所有字段全部列出来(后期java程序执行时)。
如果是手动临时查询,可以使用*。


查看每个老师的名字,职称,工资,性别
SELECT name,title,salary,gender
FROM teacher

2. WHERE子句

在DQL中用于筛选查询的记录。最终数据库仅将满足WHERE子句条件的记录体现在结果集中。

  • 查看职称为"一级讲师"的老师名字和工资?

    1:查询的是老师信息,能确定FROM子句中的表名为teacher
    2:查看的是老师的名字和工资,能确定SELECT子句中的字段name和salary
    3:由于仅查看"一级讲师",能确定WHERE子句过滤条件为title='一级讲师'
    SELECT name,salary,title
    FROM teacher
    WHERE title='一级讲师'
    
  • 查看除’刘苍松’老师以外的其他老师的名字,工资和年龄?

    SELECT name,salary,age
    FROM teacher
    WHERE name<>'刘苍松'
    
  • 查看所有职位是’大队长’的同学的名字年龄和性别

    SELECT name,age,gender
    FROM student
    WHERE job='大队长'
    
  • 查看年龄在30(含)岁以上的老师都有谁?查看老师的名字,年龄,性别,工资

    SELECT name,age,gender,salary
    FROM teacher
    WHERE age>=30
    

2.1 使用AND"与"和OR"或"来连接多个条件进行查询

  • AND:都为真时才为真
  • OR:都为假时才为假

  • 查看7岁的大队长都是谁?列出:名字,年龄,性别,职位

    SELECT name,age,gender,job
    FROM student
    WHERE job='大队长' AND age=7
    
  • 查看班级编号小于6的所有中队长的名字,年龄,性别,职位和所在班级编号

    SELECT name,age,gender,job,class_id
    FROM student
    WHERE class_id<6 AND job='中队长'
    
  • 查看所有一级讲师和三级讲师的名字,职称,工资?

    SELECT name,title,salary
    FROM teacher
    WHERE title='一级讲师' OR title='三级讲师'
    
  • 查看所有大队长,中队长和小队长的名字,年龄,性别

    SELECT name,age,gender
    FROM student
    WHERE job='大队长' OR job='中队长' OR job='小队长'
    
  • 查看班级编号在6(含)以下的所有大队长和中队长的名字,年龄,职位,班级编号

    AND的优先级是高于OR的, 可以使用( )提高优先级

    SELECT name,age,job,class_id
    FROM student
    WHERE class_id<=6 AND job='大队长' OR job='中队长'
    上述SQL的条件应当读作:查看班级编号6以下的大队长和所有班级编号的中队长
    
    
    SELECT name,age,job,class_id
    FROM student
    WHERE class_id<=6 AND (job='大队长' OR job='中队长')
    提高OR的优先级满足查询要求
    

2.2 IN(列表):等于列表其中之一(在列表中)

  • 查看所有的大队长,中队长,小队长的名字,年龄,性别

    SELECT name,age,gender
    FROM student
    WHERE job='大队长' OR job='中队长' OR job='小队长'
    等价于
    SELECT name,age,gender
    FROM student
    WHERE job IN('大队长','中队长','小队长')
    
  • 查看所有一级讲师,二级讲师,三级讲师的老师名字,职称和工资?

    SELECT name,title,salary
    FROM teacher
    WHERE title IN ('一级讲师','二级讲师','三级讲师')
    

2.3 NOT IN(列表):不在列表中,不能等于列表中的所有项

  • 查看一级讲师和二级讲师以外的所有老师的名字,职称,工资?
 SELECT name,title,salary
 FROM teacher
 WHERE title NOT IN('一级讲师','二级讲师')
  • 查看不是中队长和大队长以及小队长的其他学生的名字,年龄,职位

    SELECT name,age,job
    FROM student
    WHERE job NOT IN('大队长','中队长','小队长')
    

2.4 BETWEEN…AND…:在一个范围之内

  • 查看工资在2000-5000之间的老师的名字,工资,职称?

    SELECT name,salary,title
    FROM teacher
    WHERE salary>=2000 AND salary<=5000
    等价于
    SELECT name,salary,title
    FROM teacher
    WHERE salary BETWEEN 2000 AND 5000
                         下限      上限
    
  • 查看年龄在7-10岁之间的学生的名字,年龄,性别

    SELECT name,age,gender
    FROM student
    WHERE age BETWEEN 7 AND 10
    
  • 查看年龄在20-35岁之间的男老师的名字,职称,年龄

    SELECT name,title,age
    FROM teacher
    WHERE age BETWEEN 20 AND 35
    AND gender='男'
    
  • 查看3-5楼的班级名称都是什么?

    SELECT name
    FROM class
    WHERE floor BETWEEN 3 AND 5
    

2.5 DISTINCT去重操作。

在结果集中去除指定字段值相同的记录

语法

SELECT DISTINCT 字段1[,字段2,...]
FROM 表名
...
  • DISTINCT关键字必须紧跟在SELECT子句之后
  • DISTINCT后面可以指定多个字段,当这几个字段组合相同的记录会在结果集中被去除

  • 查看老师的职称都有哪些?

    SELECT title
    FROM teacher
    上述SQL语句的查询结果集是展现每个老师的职称,与查询需求不匹配
    
    SELECT DISTINCT title
    FROM teacher
    将查询结果集中重复的title去除后得到正确效果
    
  • 查看学生的职位都有哪些?

    SELECT DISTINCT job
    FROM student
    
  • 查看各年龄的职位都有哪些?

    SELECT DISTINCT age,job
    FROM student
    

练习:

1.查看负责课程编号(subject_id)1的男老师都有谁?
  SELECT name,salary,title
  FROM teacher
  WHERE subject_id=1 AND gender='男'
  
2.查看工资高于5000的女老师都有谁?
  SELECT name,salary,title
  FROM teacher
  WHERE salary>5000 AND gender='女'
  
3.查看工资高于5000的男老师或所有女老师的工资?
  SELECT name,salary,gender
  FROM teacher
  WHERE salary>5000 AND gender='男' OR gender='女'

4.查看所有9岁学生的学习委员和语文课代表都是谁?
  SELECT name,job,age
  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值