--增加字段 ALTER TABLE employee ADD stu_address VARCHAR(10); --删除字段 ALTER TABLE employee DROP stu_address; --修改字段类型 ALTER TABLE employee MODIFY stu_address VARCHAR(5); --修改字段名和类型 ALTER TABLE employee CHANGE stu_address stu_addr VARCHAR(5); --修改字段默认值 ALTER TABLE employee ALTER stu_addr SET DEFAULT "here"; --删除字段默认值 ALTER TABLE employee ALTER stu_addr DROP DEFAULT; --修改数据表名 ALTER TABLE employee RENAME employ;
查看数据表
1
SHOW COLUMNS FROM employee;
复制数据表
1 2 3 4 5 6 7 8 9 10
--查询创建信息 SHOW CREATE employee; --复制表内容 INSERT INTO employee_copy ( stu_id, stu_name, stu_salary, stu_addr) SELECT stu_id, stu_name, stu_salary, stu_addr FROM employee;
可以使用SHOW CREATE语句获取创建该表的创建命令,修改表名并运行即可复制一个新表。
使用INSERT INTO … SELECT可以复制表的内容。
插入数据
1 2 3 4
INSERT INTO Students (stu_name,stu_sex,stu_high,stu_weight,stu_birth) values ('fengbin', 'm', 175, 60, '1997-10-25');
查询数据
1 2 3 4 5 6 7 8 9 10 11
SELECT DISTINCT * FROM students WHERE stu_high <= 160 AND stu_sex = 'F' AND stu_name LIKE 'Han%' ORDER BY stu_high, stu_weight DESC LIMIT 5, 1;
数据排序
ORDER BY 为按字段排序,默认为ASC升序,DESC为降序,可使用多字段排序,规则为先按第一个字段排序,再按第二个字段排序。
数据截取
LIMIT A 为截取前A条记录,LIMIT B,A 为偏移B条记录取A条记录。
模糊匹配
LIKE子句用来查找满足对应规则的记录,其中%代表任意字符。
1 2 3 4 5 6 7 8 9 10 11
SELECT stu_name FROM students UNION SELECT stu_name FROM employee ORDER BY stu_name;
数据联合
UNION 语句将两个查询结果进行联合并去重,若改为UNION ALL则不去重。
1 2 3 4 5 6 7 8 9 10 11 12
SELECT COALESCE ( stu_sex, 'total' ) AS stu_sex, COALESCE ( stu_high, 'total' ) AS stu_high, COUNT(*), MAX( stu_high ) AS max_high FROM STUDENTS WHERE stu_name LIKE '%Sum%' GROUP BY stu_sex, stu_high WITH ROLLUP;
数据分组
GROUP BY对一个或多个列进行分组,在分组的列上可以使用SUM,AVG,COUNT等函数对值进行操作。
SELECT a.stu_id, a.stu_name, a.stu_sex, b.stu_salary FROM students a INNER JOIN employee b ON a.stu_id = b.stu_id; --以上SQL语句等价为 SELECT a.stu_id, a.stu_name, a.stu_sex, b.stu_salary FROM students a, employee b WHERE a.stu_id = b.stu_id;
INNER JOIN 会读取两个表的交集数据。
左连接
1 2 3 4 5 6 7 8
SELECT a.stu_id, a.stu_name, a.stu_sex, b.stu_salary FROM students a LEFT JOIN employee b ON a.stu_id = b.stu_id;
LEFT JOIN会读取A表的全部数据,即使B表没有对应数据。
右连接
1 2 3 4 5 6 7 8
SELECT a.stu_id, a.stu_name, a.stu_sex, b.stu_salary FROM students a RIGHT JOIN employee b ON a.stu_id = b.stu_id;
RIGHT JOIN会读取B表的全部数据,即使A表没有对应数据。
NULL值处理
1 2 3 4 5 6
SELECT * FROM employee WHERE stu_salary IS NOT NULL;
--添加索引 CREATE INDEX index_name ON employee(stu_name); ALTER TABLE employee ADD INDEX index_name(stu_name); --删除索引 DROP INDEX index_name ON employee;
唯一索引
索引值必须唯一,可以为空值。如果是组合索引,组合的列值必须唯一。
1 2 3 4 5
--添加索引 CREATE INDEX index_name ON employee(stu_name); ALTER TABLE employee ADD INDEX index_name(stu_name); --删除索引 DROP INDEX index_name ON employee;
重复数据
可以设置字段为PRIMARY KEY(主键)或者UNIQUE索引来保证数据的唯一性。
再插入时使用INSERT IGNORE INTO可以跳过重复数据的插入。
使用DISTINCT关键字来过滤重复数据。
统计重复数据
1 2 3 4 5 6 7 8 9 10 11
SELECT COUNT(*) AS stu_num, stu_high FROM students GROUP BY stu_high HAVING stu_num > 1 ORDER BY stu_high;
统计stu_high重复数大于1的数据。
删除重复数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
--复制一个无重复数据的表 CREATE TABLE temp SELECT stu_id, stu_name, stu_salary FROM employee GROUP BY stu_id, stu_name, stu_salary; --删除原表 DROP TABLE employee; --修改新表的名字 ALTER TABLE temp RENAME employee;