课程名称:Java工程师2022版
课程章节:Java数据库开发与实战
课程讲师:IT老齐 悟空 八戒猪 神思者 Leo
课程内容:数据库的基本查询
一、数据库索引
1.数据排序的好处,一旦数据排序之后,查找的速度就会翻倍,现实世界跟程序世界都是如此。
CREATE TABLE t_message(
id INT UNSIGNED PRIMARY KEY,
content VARCHAR(200) NOT NULL,
type ENUM("公告","通报","个人通知") NOT NULL,
create_time TIMESTAMP NOT NULL,
INDEX idx_type (type)
);
运行上述代码就可以创建索引。
2.删除索引的方式
使用DROP INDEX idx_type on t_message;
删除在t_message表中的名为idx_type的索引。
3.创建索引的方式
方法一,可以使用CREATE INDEX idx_type ON t_message(type);
创建一个名为idx_type的索引在t_message这个表里的type字段上。创建完成后可以使用SHOW INDEX FROM t_message;
查看表t_message上所有的索引,一个是主键索引,另一个是我们创建的idx_type索引。
方法二,可以使用ALTER TABLE t_message ADD INDEX idx_type(type);
往表t_message的type字段上添加一个名为idx_type的索引。创建完成后可以使用SHOW INDEX FROM t_message;
查看表t_message上所有的索引,一个是主键索引,另一个是我们创建的idx_type索引。
4.索引的使用原则
数据量很大,且经常被查询的数据表可以设置索引。
索引只添加在经常被用作索引条件的字段上面。
不要再大字段上创建索引。
二、数据库的基本查询
1.记录查询
最基本的查询语句是由SELECT和FROM关键字组成的。
SELECT * FROM t_emp;
SELECT empno,ename,sal FROM t_emp;
SELECT语句屏蔽了物理层的操作,用户不必关系数据的真实存储,交由数据库高效的查找数据。
第一条语句用于查询当前表t_emp中所有字段的信息。
第二条语句用于查询当前表t_emp中的empno,ename,sal字段的信息。
2.使用列别名
通常情况下,SELECT字句中使用了表达式,那么这列的名字就默认为表达式,因此需要一种对列名重命名的机制。
SELECT
empno,
sal*12 AS "income"
FROM t_emp;
所以在记录查询的基础上可以使用AS语法给字段一个别名,这样查询到的结果就是income,而不是sal*12。
3.查询语句的字句执行顺序
首先进行词法分析和优化,读取SQL语句;
FROM选择数据来源;
SELECT选择输出内容。
综上所述,我们可以确定FROM的优先级是高于SELECT的优先级的。
4.数据分页
比如我们查看朋友圈,只会加载少量部分信息,不用一次性加载全部的朋友圈,那样只会浪费CPU时间,内存和网络宽带。
如果结果集的记录很多,则可以使用LIMIT关键字限定结果集数量。
SELECT empno,ename FROM t_emp LIMIT 0,20;
上述代码可以从表t_emp中查询到empno,ename字段的前20条数据;限制分页的语法是LIMIT,有两个参数,第一个参数是0表示起始的位置,第二个参数是20,表示偏移量(步长)。
如果LIMIT字句只有一个参数,它表示的是偏移量,起始值默认为0 SELECT empno,ename FROM t_emp LIMIT 10;
这里虽然省去了第一个参数,相当于 SELECT empno,ename FROM t_emp LIMIT 0, 10;
FROM -> SELECT -> LIMIT的执行顺序,首先是FROM语句执行,其次是SELECT语句执行,最后才是LIMIT语句执行。
5.结果集排序
如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用ORDER BY 字句。SELECT ename,sal FROM t_emp ORDER BY sal ASC;
ORDER的参数,ASC升序,DESC降序。
ASC代表升序(默认),DESC代表降序。
如果排序列是数字类型,数据库就按照数字大小排序,如果是日期类型就按照日期大小排序,如果是字符串就按照字符集序号排序。SELECT ename,sal FROM t_emp ORDER BY hiredate DESC;
从当前表t_emp中查询ename,sal的信息,然后使用ORDER BY语句选择hiredate字段进行DESC降序排序。
6.多个排序字段
我们可以使用ORDER BY规定首要排序条件和次要排序条件条件。数据库会按照首要排序条件排序,如果遇到首要排序内容相同的记录,那么就会启用次要排序条件接着排序。
SELECT empno,ename,sal,hiredate
FROM t_emp
ORDER BY sal DESC,hiredate ASC;
首先执行的还是FROM语句,从当前表t_emp中选中empno,ename,sal,hiredate字段,然后使用ORDER BY字段排序,首要排序条件是sal字段降序排列,如果遇到相同内容的记录,那么就可以启用次要排序条件排序,使用hiredate字段升序排序。
ORDER BY 字句书写的生活放在LIMIT字句的前面。
FROM -> SELECT ->ORDER BY ->LIMIT 语句的执行顺序。
7.去除重复记录
如果我们需要去除重复记录,可以使用DISTINCT关键字来实现。
SELECT DISTINCT job FROM t_emp;
去除的是结果集中的重复记录并不是数据库表中的重复记录,不会对数据库表中的记录产生影响。
8.注意事项
使用DISTINCT的SELECT字句只能查询一列数据,如果查询多列,去除重复记录就会失效,字段的数量超出了一个的话DISTINCT的功能就会失效。
DISTINCT关键字只能在SELECT字句中使用一次。
在使用DISTINCT的时候必须是在SELECT之后,字段之前。
课程收获:
完成了今天的学习目标:
1.数据库索引。
2.数据库的基本查询。