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.子查询

表名1a 表名2b

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 BYHAVING关键字,一起使用

查询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);

1exists是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的使用exists,可加快效率;

2in是把外表和内表做hash连接,先查询内表,再把内表结果与外表匹配,对外表使用索引(外表效率高,可用大表),而内表多大都需要查询,不可避免,故外表大的使用in,可加快效率

3如果用not in ,则是内外表都全表扫描,无索引,效率低,可考虑使用not exists,也可使用A left join B on A.id=B.id where B.id is null 进行优化。