文章目录
1. 数据库基础操作
1.1 显示当前数据库
show databases;
1.2 创建数据库
create database (if not exists)数据库名;
使用 if not exists 判断系统是否存在当前欲创建的数据库,如果存在就不创建;
1.3 使用数据库
use 数据库名;
1.4 删除数据库
drop database(if exists) 数据库名;
数据库删除后,里面的表和数据会全部被删除,这是一个比较危险的操作,要尽量避免;
2. 表操作
2.1 查看表结构
desc 表名;
2.2 创建表
create table book(
--注释:增加字段说明
name varchar(20),
author varchar(20),
price int(11),
type varchar(50)
);
这里需要注意的是,与常见的编程语言不同,SQL中创建表是变量名在前,数据类型在后;
2.3 删除表
drop table(if exists) book;
删除表会丢失表中的数据信息,与删除数据库操作相比同样危险;
3. 新增(Create)
insert into 表名(指定列) values (values_list...);
2.1 单行数据插入
第一条 insert 是全列插入,每一个字段都赋了值,此时注意values_list的数量和顺序必须要和定义表时的数量顺序一致;
第二条 insert 是指定列插入,只对指定列赋值,而第四个字段 type 没有指定,所以默认为NULL;
2.2 多行数据插入
全列插入 多行数据:
指定列插入 多行数据:
4. 删除(Delete)
delete from 表名 where ...;
如果不指定where条件则会删除全部数据,也是一个危险操作。
Q:删除表中数据和删除表的两个操作的区别?
举个例子,我们用零食来表示表中的数据,用箱子来表示表。
- 删除表:
drop table [表名];
表示删除这个表,表中的记录以及表都不存在了。可以理解为零食和箱子都没有了。 - 删除数据:
delete from 表名 where ...;;
表示删除表中的数据,但表还在。好比把箱子中的零食全部倒出去了,但是箱子还在。
5. 修改(Update)
update 表名 set 表达式 where ...;
下面我们看几个例子。
- 将申论的作者修改为 奋笔考公;
- 将name = 1这本书的价格改为90,type类型改为教材;
Q:select和update的区别?
select查询语句中我们讲过可以将查询到的结果以为别名显示在临时表中,这段数据并没有存储在相关表中,只是临时做个查看,可以理解为一次性操作;而update是真实修改了相关表中的数据,在后续对该表进行操作都是在已经修改的基础上进行的。
6. 查询(Retrieve)
5.1 全列查询
select * from 表名;
但是通常情况下不建议使用全列查询,因为查询的列越多,意味着需要传输的数据量越大;
5.2 指定列查询
select 列名... from 表名;
5.3 查询字段为表达式
select 表达式... from 表名;
此时 price+10 这个查询结果只是一个临时表,不会影响磁盘的数据,实际上数据并没有发生改变;
5.4 别名查询
select 表达式 as 别名 from 表名;
将查询到的结果以别名显示在临时表中;
5.5 去重查询
select distinct 列名 from 表名;
使用distinct关键字对指定列数据进行去重操作,同样也可以指定多个列操作;
5.6 排序查询
select 列名 from 表名 order by ...;
使用distinct关键字对指定列数据进行去重操作,同样也可以指定多个列操作;
ASC表示升序排列
DESC表示降序排列,其中,系统默认为升序
可以同时对多个字段进行排序查询,排序优先级按照编写顺序执行,先按照第一列排序,第一列相同,再按照第二列排序,依次往后执行;
5.7 条件查询where
常见运算符及其说明总结
运算符 | 说明 |
---|---|
= | 相等,NULL= NULL —> NULL |
<=> | 相等,NULL<=> NULL —> 1 |
between a and b | 范围匹配,a <= value <= b --> 1 |
in | 如果时option中的任一个 --> 1 |
NULL | 是NULL |
IS NOT NULL | 不是NULL |
like | 模糊匹配,%表示匹配任意多个字符(包含0个字符); _表示匹配任意一个字符 |
and | 多个条件表达式都为1 --> 1 |
or | 任意一个条件表达式为1 --> 1 |
not | 条件为1 --> 0 |
- 查询价格在60以上或40以下,并且书名是西游记的所有书籍信息:
- 查询价格在40到60之间的所有书籍信息:
- 查询价格是40或60或66的所有书籍信息:
- 查询书名中以 ’西‘ 开头的所有书籍信息:
- 查询书名中以 ’西‘ 开头且长度为两个字符的所有书籍信息:
模糊查询 like 小结:
-
LIKE’西%’ : 将搜索以字符 ‘西’ 开头的所有字符串(如 西游记、西域);
-
LIKE’%记’ : 将搜索以字符 ‘记’ 结尾的所有字符串(如 西游记);
-
LIKE’%游%’ : 将搜索在任何位置包含 ‘游’ 所有字符串(如 西游记);
-
LIKE’西_’ : 将搜索以字符 ‘西’ 开头的长度为2的所有字符串(如 西域);
5.8 分页查询limit
假设表book有12条记录,如下图所示,
按 [price]升序 进行分页,设置每页 4条记录,分别显示 第1,2,3页。
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 4 OFFSET 0;
- OFFSET表示从某行开始记录,那么上式表示输出按照price从小到大排列后的前四行(从第0行开始,数4个结束)数据。
同样的上图表示从第4行开始数4个数据,即输出按照price从小到大排列后的4~8行数据。