数据操作和查询
数据操作
插入
SQL
INSERT [INTO] 表名 [(列名)] VALUES (值列表);
WARNING
每次插入
一行
数据,不能只插入一部分数据,插入的数据是否有效将按照整行的完整性要求来检验每个数据值的
数据类型
、精度
、位数
必须与要与对应的列名
精确匹配不能为
标识符
指定值如果某字段设置为不能为空,则必须插入数据
插入数据时还要符合
检查性约束
的要求有
缺省值
的列,可以使用DEFAULT
关键字来代替插入实际的值
例子
SQL
INSERT lyb.student (name, age, gender) VALUES ('张三', 22, 0);
INSERT INTO lyb.student (name, age, gender) VALUES ('李四', 28, 0);
更新
SQL
UPDATE 表名 SET 列名 = 更新值 [WHERE 更新条件]
WARNING
多列
时用逗号
隔开,一定要加更新条件
以免错误更新多个联合条件
使用AND
,a=7 and b='410787'
判断某字段是否为空
xxx is null or xxx = ''
例子
SQL
UPDATE student SET name = '李四改', age = 30 WHERE id = '3';
删除
SQL
DELETE FROM 表名 [WHERE <删除条件>]
TIP
Delete
语句是对整行
进行操作,因此不需要提供列名
如果要删除
主表数据
,则要先删除子表
记录
例子
SQL
DELETE FROM student WHERE id = '3';
# 清空表中的所有数据
DELETE FROM student1;
截断表(清空表数据)
SQL
TRUNCATE table_name;
# 例如
TRUNCATE student1;
TIP
表中数据会
全部清空
,但表结构
、列
、约束
等不被改动
不能用于有
外键约束
引用的表标识列重新开始编号
因为要删除的数据不会写入日志,数据也不能恢复,所以工作中请尽量不要使用此命令
查询
SQL
SELECT <列名>
FROM <表名>
[WHERE <查询条件表达式>]
[ORDER BY <排序的列名>[ASC或DESC]]
- 查询年龄为
18
的并且按照id
倒序排列
SQL
SELECT * from lyb.student WHERE age = '18' ORDER BY id DESC;
查询空行
SQL
SELECT *
FROM student
WHERE city is null or city =''
限制查询的行数
SQL
# 查询到第一条符合的就返回
SELECT * FROM student WHERE province = '广东省' LIMIT 1;
去重
DISTINCT
:从查询结果中返回唯一的值,它可以应用于一个
或多个列
,以消除重复的行
- 对于
单列
使用DISTINCT
SQLSELECT DISTINCT 列名 FROM 表名;
- 对于
多列
使用DISTINCT
SQLSELECT DISTINCT 列1, 列2, ... FROM 表名;
- 对于
例子
表结构如下:
SQL
id,name,age,gender,provience
1,张三,22,0,河南省
2,李四,28,0,江苏省
3,王婉,20,1,上海市
4,李丽,18,1,北京市
5,张环,20,0,广东省
6,如燕,18,1,新疆维吾尔自治区
7,李朗,18,0,陕西省
8,沈涛,18,0,江苏省
9,肖豹,18,0,广东省
10,杨方,22,0,河南省
11,杨方,22,0,河南省
SQL
如下:
SQL
SELECT DISTINCT province FROM student;
# 结果如下:
/**
河南省
江苏省
上海市
北京市
广东省
新疆维吾尔自治区
陕西省
*/
模糊查询
- 查询的条件是
模糊
的,不是特别明确
的
通配符
代替一个或多个
真正的字符,与LIKE
关键字一起使用
_
:表示一个任意字符
%
:表示任意长度的字符串
SQL
SELECT * FROM student WHERE name LIKE '_三';
SELECT * FROM student WHERE name LIKE '张%';
BETWEEN AND
- 查询某一列在指定的规范内的记录,
包括两个边界
SQL
SELECT * FROM student WHERE age BETWEEN '20' AND '22';
IN
- 查询某一列中的值在列出的内容列表中
SQL
SELECT * FROM student WHERE province IN ('上海市', '广东省');