文章目录
一、DML语句
1.插入数据
insert into tablename (列名,列名,列名....) values(值,值,值....);
- 例句
insert into t (id,name,address,birth,sex) values (1,'郭靖','桃花岛','1980-1-1','男');
- 省略字段名,意味着给所有的字段定值,可以同时添加多条数据,中间用逗号隔开。
insert into t values (1,'郭靖','桃花岛','1980-1-1','男'),(2,'黄蓉','桃花岛','1988-2-9','女');
** 注意 ** 如果id是自动增长的,那么不能省略字段
2.修改数据
update 表名 set 字段名=值,字段名=值, ... where 条件;
- 修改杨过的id为5
update t set id=5 where name = '杨过';
- 修改黄蓉的id为6,年龄为20
update t set id=6,age = 20 where name = '黄蓉';
3.删除数据
delete from 表名 where 条件;
- 删除名字是黄蓉的人
delete from t where name = 黄蓉;
二、DQL语句
1.普通查询某列的值
select 字段名,字段名..... from 表名
- 显示姓名和年龄两列的值
SELECT age, name FROM t1;
2.带条件查询
select 字段名,字段名..... from 表名 where 字段名 = 值
- 例子
SELECT * FROM t1 WHERE name = '小龙女';
SELECT * FROM t1 WHERE age >= 25 AND age <=30;
SELECT * FROM t1 WHERE age <= 20 OR age >=30;
SELECT * FROM t1 WHERE name <> '杨过';
3.模糊查询
% 代表任意个字符, _ 代表任意的一个字符
采用LIKE关键字来写模糊表达式
- 例子
查询所有姓杨的人
SELECT * FROM t1 WHERE name LIKE '杨%';
查询name含有王的人
SELECT * FROM t1 WHERE name LIKE '%王%';
查询名字中含有王,且长度为2个字
SELECT * FROM t1 WHERE NAME LIKE '王_' OR '_王';
4.NULL的查询
SELECT * FROM 表名 WHERE 字段名 IS NULL;
- 例子
SELECT * FROM t1 WHERE age IS NULL;
SELECT * FROM t1 WHERE age IS NOT NULL;
SELECT * FROM t1 WHERE age IS NOT NULL AND age = '';
5.查询关键字
-
distinct : 去除重复的数据,必须放在所有字段前面
SELECT DISTINCT 字段名 FROM 表名
-
in关键字 :表示在。。。。里面
SELECT * FROM 表名 WHERE 字段名 IN (value1,value2,...);
-
关键字 ORDER BY 当字段值一样时,默认按照ID升序排序
默认是升序(asc),(desc)降序
-
关键字group by 分组查询
SELECT * FROM 表名 GROUP BY 字段名;
-
例子
SELECT DISTINCT age FROM t1 (去除age列重复值)
SELECT * FROM t WHERE age IN (50,20,23); (查询age = 20,age = 50,age = 23)
SELECT * FROM t ORDER BY age DESC; (age降序排列)
SELECT * FROM t ORDER BY age ,id DESC; 先按照age的升序排序,值一样的按照降序排列
SELECT * FROM t GROUP BY sex; (按性别分组)
6.限制查询
-
LIMIT m, n : m是开始的索引,n是截取的长度
SELECT * FROM 表名 ORDER BY 字段名 DESC LIMIT m,n;
-
例子
查询年龄最大的三个人
SELECT * FROM t ORDER BY age DESC LIMIT 0,5;
SELECT * FROM t ORDER BY age DESC LIMIT 2,5;
7.聚合查询
在MySQL中定义了5个聚合函数 分别是max() min() avg() sum() count()
- 例子
SELECT id ,NAME,MAX(age) FROM t; (查询年龄最大的人 )
SELECT id ,NAME ,MIN(age) FROM t; (查询年龄最小的人 )
SELECT AVG(age),SUM(age)/COUNT(id) , COUNT(*) FROM t ; (平均值)
SELECT COUNT(IFNULL (age,0)) FROM t; (年龄不为空的总数量)
SELECT COUNT(*) FROM t; (总数量)
SELECT SUM(age) FROM t; (年龄的总和)
三、完整性
完整性:用来保护非法的数据不允许进入到数据库
完整性分类
1.域完整性:用来限定字段的取值范围
* 手段:数据类型
2.实体完整性:对关系中的记录唯一性,也就是主键的约束
* 主键:用来唯一的区分每条记录的一列或者多列的值。
* 主键特点:非空,唯一。
* 每一张表只能有一个主键
* 多列充当主键就成为联合主键或者复合主键
* 手段:自增,主键
3.引用完整性:就是对外键的约束
* 需要在子表中创建外键来引用主表的主键(外键只能引用主键)
* 外键所在的表称为子表或从表,主键所在的表称为主表
* 在添加记录时,必须先添加主表的记录,然后再添加子表的记录
* 修改主表的记录时,不允许修改有外键引用约束的主键
* 删除数据的时候,必须先删除子表的数据,然后删除主表中的数据。
* 手段:外键约束·
四、约束
约束:用来限定字段的取值,对表中数据进行限定,保证数据的完整性,有效性,正确性
1.约束的分类:
1.主键约束:
2.唯一约束:unique
3.非空约束:not null
4.默认约束:default
5.外键约束:foreign key
-
演示自增以及约束
自增id
关键字:PRIMARY KEY(主键),AUTO_INCREMENT(自增)
-- 创建表
CREATE TABLE t3
(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT
)
-- 插入数据(未插入id,因为id自增从1开始)
INSERT INTO t3 (NAME,age) VALUES ('张无忌','20');
INSERT INTO t3 (NAME,age) VALUES ('郭靖','21');
INSERT INTO t3 (NAME,age) VALUES ('黄蓉','30');
INSERT INTO t3 (NAME,age) VALUES ('杨过','25');
结果展示
2.五个约束
-- 创建表
CREATE TABLE stu
(
id INT PRIMARY KEY ,
NAME VARCHAR(20) UNIQUE,
age INT NOT NULL,
sex VARCHAR(2) NOT NULL,
address VARCHAR(20) DEFAULT '北京'
);
-- 插入数据
INSERT INTO stu VALUES ('1','张无忌','20','男','明教');
INSERT INTO stu (id ,NAME ,age, sex ,address) VALUES ('2','郭靖','30','男','明教');
-- 未设置address,默认北京
INSERT INTO stu (id ,NAME ,age, sex ) VALUES ('3','黄蓉','31','男');
INSERT INTO stu (id ,NAME ,age, sex ) VALUES ('4','小龙女','31','男');
INSERT INTO stu (id ,NAME ,age, sex ) VALUES ('5','杨过','31','男');
结果展示