以Mysql为例总结
一.常规语句
1.创建数据库
CREATE DATABASE 数据库名;
2. 创建表
CREATE TABLE table_name (column_name column_type);
3. 插入数据
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
4. 查询数据
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
5. 修改数据
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
5.1 增加列
Alter table copy1 add gender VARCHAR(255);
5.2.修改列名称
修改列employee_age 名称为 age:
ALTER TABLE copy1 CHANGE employee_age age VARCHAR(32);
5.3 修改列类型
修改列age 类型为 VARCHAR(16):
ALTER TABLE copy1 MODIFY age VARCHAR(16);
5.4删除列
删除表的age列:
ALTER TABLE copy1 DROP age;
6. 删除数据
DELETE FROM table_name [WHERE Clause]
二.方便测试开展的语句
1.常用聚合函数
avg(字段名):求该字段的平均值
sum(字段名):求和
max(字段名):求最大值
min(字段名):求最小值
count(字段名):统计该字段的记录的条数
2.拷贝表数据
拷贝数据,源表名:a 目标表名:b,两个表结构一样不一样均可
insert into b(a, b, c) select d,e,f from b;
3.复制表结构
只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2;
或
CREATE TABLE 新表 LIKE 旧表 ;
4.复制表结构及数据
CREATE TABLE 新表 SELECT * FROM 旧表;
5.子查询
表名1:a 表名2:b
select a,b,c from a where a IN (select d from b )
或者
select a,b,c from a where a IN (1,2,3)
6.前几条记录
select * from table LIMIT 5,10; #返回第6-15行数据
select * from table LIMIT 5; #返回前5行
select * from table LIMIT 0,5; #返回前5行
7. 随机取数据
随机取出10条数据
SELECT * FROM table ORDER BY RAND() LIMIT 10;
8.分组查询
8.1. GROUP BY单独使用
SELECT MAX(age),gender FROM copy1 GROUP BY gender;
8.2 GROUP BY和HAVING关键字,一起使用
查询copy1 表,按照gender字段进行分组,查询出age字段值之和小于100的分组
SELECT MAX(age),gender FROM copy1 GROUP BY gender HAVING sum(age)<100;
9. Exists子查询
drop table if exists student; 意思是如果存在表student则删除!否则不删除!
Create table if not exists student; 意思是如果不存在表student则创建,否则不创建!
Select 列表 from 表名 where exists (子查询);
#对B查询涉及id,使用索引,故B表效率高,可用大表 -->外小内大
select * from A where exists (select * from B where A.id=B.id);
#对A查询涉及id,使用索引,故A表效率高,可用大表 -->外大内小
select * from A where A.id in (select id from B);
1、exists是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的使用exists,可加快效率;
2、in是把外表和内表做hash连接,先查询内表,再把内表结果与外表匹配,对外表使用索引(外表效率高,可用大表),而内表多大都需要查询,不可避免,故外表大的使用in,可加快效率。
3、如果用not in ,则是内外表都全表扫描,无索引,效率低,可考虑使用not exists,也可使用A left join B on A.id=B.id where B.id is null 进行优化。