sql语句总结
数据库sql语句 (结构化查询语言)
DDL(Data Definition Language)数据定义语言用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等
一 创建 关键字 create
1. 创建数据库create database……
创建数据库 create database mydatabase;
2.创建数据库带编码create database…..character set……
带编码 create database mydatabase character set utf8;
3. 创建表create table….()……
create table mytable(
name char(10),
age int,
birthday date
);
4. 根据已有的表结构创建新表create table…..like…….
create table copymytable like mytable;
5. 创建用户 create user…. identified by…..
create user ‘用户名’@’主机’ identified by ‘密码’;
create user ‘user1’@‘localhost’ identified by ‘123456’;
二 修改 关键字 alter
1. 修改数据库编码格式alter database……default charactor set…….
alter database mydatabase defaule charactor set utf-8;
2.修改表的字符集(编码格式)alter table…….charactor set…….
alter table mytable charactor set utf-8;
3.修改表字段
1. 添加字段 alter table…..add……
alter table mytable add myline varchar(10);
2.修改字段类型alter table…..modify……
alter table mytable modify myline int
3.修改字段名字alter table…..change ……
alter table mytable change myline newmyline varchar();
4.删除一个字段alter table…..drop……
alter table mytable drop myline;三 删除 关键字drop
1. 删除数据库 drop database……
drop database mydatabase;
2. 删除表drop table……
drop table mytable;
四 完整性约束条件primary key/unique/not null/default/poreign key/zerofill/unsigned
- primary key: 主键约束
- unique: 唯一约束 注:唯一但是可以为空(空和空不相等)
- not null: 非空约束
- default: 默认值
- poreign key: 外键约束
- zerofill :零填充
- unsigned:无符号位 <font color=red>注:无符号作用于数值类型</font>
1.在创建的表时候同时创建约束
**create table **mytable(
id int primary key/unique/not null/default 6/foreign key references **subject(id)/zerofill/unsigned**
);
**create table **mytable(
id int ,
name varchar(10),
primary key(id,name)/unique(id,name)/foreign key(id) references subject(id););
-
增加约束
alter table mytable add primary key(id,name)/unique(id,name)/not null/default 6/zerofill;
添加外键约束
alter table **mytable **add foreign key(id) references subject(id);
带外键名的添加方法
alter table ** mytable **add constraint key_name foreign key(id) references subject(id);
在添加外键约束的时候可以设置他的级联更新和级联删除
on update cascade 级联更新,主键表的主键修改同时会修改外键表的外键
alter table ** mytable **add constraint key_name foreign key(id) references subject(id) on update cascade;
on select cascade 级联删除,主键表的数据删除,同时会删除外键表对应的数据
alter table ** mytable **add constraint key_name foreign key(id) references subject(id) on delete cascade no update cascade ;
-
删除约束
unique 约束删除用关键字 index
alter table **mytable **drop primary key/index name_2
删除外键
alter table **mytable **drop foreign key key_name;
<font color=red>注:主键约束相当于(唯一约束+非空约束)</font>
<font color=red>一张表中最多有一个主键约束,如果设置多个主键,就会出现如下提示:</font>
<font color=red>Multiple primary key defined!!!</font>
<font color=red>删除主键约束前,如果有自增长需要先删除自增长,如果不删除自增长就无法删除主键约束</font>
int类型主键自增auto_increment
**create table **mytable(
id int primary key auto_increment
);
级联 cascade
on delete cascade 删除主表中的数据时,从表中的数据随之删除
on update cascade 更新主表中的数据时,从表中的数据随之更新
**on delete set null **删除主表中的数据时,从表中的数据置为空
默认 删除主表中的数据前需先删除从表中的数据,否则主表数据不会被删除
DML(Data Manipulation Language)数据操作语言用来对数据库中表的数据进行增删改。关键字:insert, delete, update等
一 插入记录 关键字 insert into
1.插入一条记录insert into…..value……
insert into mytable(id,name,age)value(1,’张三’,20);
inster into mytable value(1,’张三’,20);
二 更新记录 关键字 update…..set
1. 更新字段update…..set…….
更新所有记录的id字段update…..set…….
update mytable set id=2;
按条件更新id字段update…..set…….where……
update mytable set id=2 where name=‘张三’,sex=’女’;三 删除记录 关键字 delete from
1. 删除记录 delete from….
删除表中所有记录delete from……..
delete from mytable;
按条件删除表中记录 delete from……where…….
delete from mytable where id=1;
DQL(Data Query Language) 数据查询语言对数据库进行数据查询,关键字select
一 查询 关键字 select……from
1.查询记录的 所有/部分 字段 select * ……from / select id,name……from 别名 as
属性名后面+空格+别名 也可以用as关键字
select * from mytable;
select id as 学号,name from mytable;
2.按条件查询记录的 所有/部分 字段select* ……from…….where……/select id,name ……from…….where……
select * from mytable where id=1;
select id,name from mytable where id=1;
3. where中的条件
1.逻辑运算 and/or/!
select * from mytable where id is null and name=’张三’ ;
select * from mytable where id is null or id is not null;
select * from mytable where name!=’张三’ ;
2. 判空 is null/is not null
select * from mytable where id is null;
select * from mytable where id is not null;
3. 可枚举值的范围查询 in();
select * from mytable where id in(1,2,4);
4. 连续范围查询 between…..and……
操作符 between … and 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
select * from mytable where id between 1 and 4; –1 4都包含
5. 模糊查询 like…..
通配符
% 代表任意零个或多个字符
_ 代表任意一个字符
select * from mytable where name like ‘张%’ ;
4. 对结果集进行排序 order by…..asc/desc
升序 asc(默认)asc可省略 但是为了可读性 建议不要省略
select * from mytable where name like ‘张%’ order by id asc ;
降序 desc
select * from mytable order by id desc;
5. 聚合函数 max() min() avg() sum() count()……
聚合函数放在select/having后面 他是对查询出的所有记录的指定字段进行操作 MAX(字段) ,统计指定字段的最大值,不统计记录为null MIN(字段) ,统计指定字段的最小值,不统计记录为null AVG(字段) ,统计指定字段的平均值,不统计记录为null SUM(字段) ,统计指定字段的求和,不统计记录为null COUNT(字段),统计指定字段的记录条数,要求当前字段的值不能为空的记录才能统计到
select max(id) from mytable ;
6. 分组查询 group by……having…….
group by可以将查询结果按照指定字段进行分组 having 可以对分组后的记录进行条件筛选 如果没有对查询结果进行聚合操作 分组默认显示查询的第一行记录
<font color=blue>在where中不能使用别名 应为在where语句运行时select语句后的别名还没有执行所以还不存在,当需要大量使用别名的时候可以用group by….having分组筛选代替where语句 </font>
<font color=blue>*select name** 姓名 ,english 英语,chinese+english+math sum from **student **group by **id **having sum>220 ;</font>
select sex,avg(age)from mytable group by sex;
select sex,avg(age)from mytable group by sex having avg(age)>40;
7. 分页查询 limit
取出查询结果的一部分
limit 0,3 起始位置从0开始,如果不写默认就是0 取三个数据 第一行记录也是从0开始的 包括开头
select ** name 姓名 **from mytable where sex=’男’ group by age desc limit 0,3;
8.去重查询 distinct
去掉查询结果中的重复记录
select distinct name from student;
9. top字句 top/top….percent
top 子句用于规定要返回的记录的数目。
<font color=red> 注释:并非所有的数据库系统都支持 TOP 子句。</font>
select top 2 * from mytable;
top percent 选取 50% 的记录
select top 50 percent * from mytable;
二 多表查询….[inner] join……on…../…….left [outer] join…..on……/…….right[outer] join…..on……
1. 笛卡儿积
select * from student , subject;
用 where 语句除去笛卡儿积(隐式内链接)
select * from student , subject where student . id = subject . id;
2. 内链接….[inner] join……on…..
表与表之间连接 并用on关键字指定连接条件 inner 关键字可以省略
select * from **student **[inner] join subject on student . id = subject . id;
3. 外连接…….left [outer] join…..on……/…….right[outer] join…..on……
左/右外连接 在符合内连接的基础上让左/右表的数据全部出来,右/左边有数据就显示,无数据就是为null
找出所有学生的信息 还没来得及选课的同学 课程显示为null;
select * from **student **left [outer] join subject on student . id = subject . id;
select * from **student **right [outer] join subject on student . id = subject . id;
4. 子查询
一个查询的结果是另一个查询的一部分,说白了就是查询里面包含另一个查询
select * from **student **where id = (select max(id) from subject );
Data Control Language(DCL) 数据控制语言 给用户授权,撤销授权
1. 用户授权 grant/revoke
1. 授权
grant 权限1,权限2,权限3,… on 数据库名.表名 to ‘用户名’@’主机’;
– 常用权限介绍 create– 创建表或数据库权限 alter– 修改表结构权限 drop – 删除表或数据库权限 insert– 添加表数据权限 update– 更新表数据权限 delete– 删除表数据权限 select– 查询表数据权限 all – 所有权限
授予所有数据库所有资源
grant all on * . * to ‘user1’@‘localhost’;
2. 撤销授权
revoke 权限1,权限2,… on 数据库名.资源名 from ‘用户名’@’主机’;
撤销user1对db1数据库所有资源的所有权限 revoke all on db1.* from ‘user1’@’localhost’;
3. 查看权限
show grants for ‘用户名’@’主机’; – 查看指定用户的权限,适合root用户操作 show grants; – 查看当前用户的权限
其他语句
查看 show
1.查看数据库show databases
show databases;
2.查看指定数据库show database……
**show database **mydatabase;
3.查询表的创建代码show create table……
show create table mytable;
选择数据库 use…..
use mydatabase;
修改表的名字 rename….to
rename table mytable to newmytable;
查询指定表的定义信息 desc….
desc mytable;
摧毁表结构再重新创建表结构 truncate table…..
truncate table mytable;
常用sql语句表
语句 | 语法 |
---|---|
AND / OR | SELECT column_name(s) FROM table_name WHERE condition AND|OR condition |
ALTER TABLE (add column) | ALTER TABLE table_name ADD column_name datatype |
ALTER TABLE (drop column) | ALTER TABLE table_name DROP COLUMN column_name |
AS (alias for column) | SELECT column_name AS column_alias FROM table_name |
AS (alias for table) | SELECT column_name FROM table_name AS table_alias |
BETWEEN | SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 |
CREATE DATABASE | CREATE DATABASE database_name |
CREATE INDEX | CREATE INDEX index_name ON table_name (column_name) |
CREATE TABLE | CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, ……. ) |
CREATE UNIQUE INDEX | CREATE UNIQUE INDEX index_name ON table_name (column_name) |
CREATE VIEW | CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
DELETE FROM | DELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_name WHERE condition |
DROP DATABASE | DROP DATABASE database_name |
DROP INDEX | DROP INDEX table_name.index_name |
DROP TABLE | DROP TABLE table_name |
GROUP BY | SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 |
HAVING | SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value |
IN | SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..) |
INSERT INTO | INSERT INTO table_name VALUES (value1, value2,….)orINSERT INTO table_name (column_name1, column_name2,…) VALUES (value1, value2,….) |
LIKE | SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern |
ORDER BY | SELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC] |
SELECT | SELECT column_name(s) FROM table_name |
SELECT * | SELECT * FROM table_name |
SELECT DISTINCT | SELECT DISTINCT column_name(s) FROM table_name |
SELECT INTO (used to create backup copies of tables) | SELECT * INTO new_table_name FROM original_table_nameorSELECT column_name(s) INTO new_table_name FROM original_table_name |
TRUNCATE TABLE (deletes only the data inside the table) | TRUNCATE TABLE table_name |
UPDATE | UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value |
WHERE | SELECT column_name(s) FROM table_name WHERE condition |
来自 http://www.w3school.com.cn