查询关键字:SELECT 语法
SELECT selection_list /*要查询的列名称*/ FROM table_list /*要查询的表名称*/ WHERE condition /*行条件*/ GROUP BY grouping_columns /*对结果分组*/ HAVING condition /*分组后的行条件*/ ORDER BY sorting_columns /*对结果排序*/ LIMIT offset_start, row_count /*结果限定*/ |
如果是插入所有的字段,那么字段的指定可以省略,比如: INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
#创建一个学生表 CREATE TABLE stu( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(6) ); #插入数据 INSERT INTO stu (sid,sname,age,gender) VALUES ('300001','刘总',20,'female'); SELECT * FROM stu; INSERT INTO stu VALUES ('3000','xyq',21,'male');
查询所有列
SELECT * FROM stu;
查询指定列
SELECT sid, sname, age FROM stu;
模糊查询 like
去除重复字段 DISTINCT
DISTINCT不要和多个字段使用,如果使用就无效
给列名添加别名 AS SELECT *,sal+IFNULL(comm,0) AS '总金额' FROM emp; AS可以省略 SELECT *,sal+IFNULL(comm,0) '总金额' FROM emp;
排序 order by
asc 升序 desc 降序
如果有多个排序,可以用逗号隔开
聚合函数:
聚合函数是用来做纵向运算的函数:
l COUNT():统计指定列不为NULL的记录行数;
l MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
l MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
l SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
l AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
分组查询:group by
having 分组后过滤
注:having与where的区别:
1.having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
2.having后面可以使用聚合函数(统计函数)
where后面不可以使用聚合函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
LIMIT 是mysql独有的
SELECT * FROM emp LIMIT 0,5; 0是初始索引值,5是每一页的条数
数据的完整性
作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性 = 在创建表时给表中添加约束
完整性的分类:
> 实体完整性
> 域完整性
> 引用完整性
实体完整性
实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行数据不重复。
约束类型: 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment)
主键约束(primary key)
特点:数据唯一(不能重复),且不能为null
唯一约束(unique):
CREATE TABLE student( id int primary key, name varchar(50) unique ); |
自动增长列(auto_increment)
给主键添加自动增长的数值,列只能是整数类型,但是如果删除之前增长的序号,后面再添加的时候序号不会重新开始,而是会接着被删除的那一列的序号
域完整性
域完整性的作用:限制此单元格的数据正确与否
域完整性约束:数据类型 非空约束(not null) 默认值约束(default)
Check约束(mysql不支持) check();
外键约束:语法格式 CONSTRAINT 外键名称 FOREIGN KEY(外键字段) REFERENCES 表名(主键)
CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, score INT, name VARCHAR(10) NOT NULL, sid INT, CONSTRAINT fk_student_score FOREIGN KEY(sid) REFERENCES student(id) ); INSERT INTO score (score,name,sid) VALUES (90,'数学',1); INSERT INTO score (score,name,sid) VALUES (92,'数学',2); INSERT INTO score (score,name,sid) VALUES (93,'数学',3);
表和表之间的关系:一对一,一对多,多对多
合并结果集
作用:合并结果集就是把两个select语句的查询结果合并到一起!
合并结果集有两种方式:
UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
要求:被合并的两个结果:列数、列类型必须相同
CREATE TABLE employee_china( id int, name varchar(50) ); CREATE TABLE employee_usa( id int, name varchar(50) ); INSERT INTO employee_usa VALUES (1,'michal'); INSERT INTO employee_usa VALUES (2,'lucy'); INSERT INTO employee_usa VALUES (3,'anmy'); INSERT INTO employee_china VALUES (1,'马云'); INSERT INTO employee_china VALUES (2,'郭永峰'); INSERT INTO employee_china VALUES (3,'马化腾'); INSERT INTO employee_usa VALUES (4,'vincent'); INSERT INTO employee_china VALUES (4,'vincent'); SELECT * FROM employee_china UNION SELECT * FROM employee_usa; SELECT * FROM employee_china UNION ALL SELECT * FROM employee_usa;
笛卡尔集过滤:
SELECT * FROM employee e,department d WHERE e.depno = d.id;
SELECT e.id,e.name as '名字',d.name as '部门' FROM employee e,department d WHERE e.depno = d.id;//取别名