Mysql常用语句
SQL语句分为三类:DDL、DML、DCL。
- DDL:数据定义语句,是对数据库内部对象进行创建、删除、修改等操作的语言。关键字包括create、drop、alter
- DML:数据操纵语句,用于添加、删除、更新和查询数据库记录,关键字包括insert、delete、update、select等
- DCL:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句
一般开发人员很少接触DCL语句,本文不涉及DCL语句。
注意:示例中方括号表示可省略关键字
DDL语句
1、连接数据库
mysql -uroot -p
2、显示所有数据库
show databases;
3、创建数据库
create database test;
4、进入指定数据库
use test;
5、显示所有表
show tables;
6、创建表
create table demo (
id int(10) not null auto_increment primary key ,
name varchar(20) not null default 'zhangsan' comment '姓名',
age int(10) not null default 0
);
7、显示表结构
desc demo;
8、查看创建表的sql语句
show create table demo \G;
9、修改表字段
alter table demo modify [column] name varchar(20) not null default '张三' comment '姓名';
10、添加表字段
alter table demo add location varchar(20) default '北京';
11、删除表字段
alter table demo drop [column] location;
12、修改表字段
alter table demo change [column] location address varchar(50) default '北京';
13、添加表字段并指定位置
alter table demo add birthday date default '1970-1-1' after name;
14、修改表字段并指定位置
alter table demo modify id int(10) first;
15、修改表名
alter table demo rename [to] emp;
DML增删改语句
1、插入记录
插入一条:
insert into demo values(10,'张三','男','20','1998-8-8','武汉');
指定赋值的字段插入:
insert into demo(name,age,birthday,address) values('李四','22','1996-8-8','武汉');
插入多条:
insert into demo(name,age,birthday,address) values('赵六','60','1958-8-8','上海'),('王
五','30','1988-8-8','北京');
2、修改记录
单表修改:
update demo set sex='女',address='深圳' where name='张三';
多表修改:
update demo [as] a , role [as] b set a.name=b.roleName ,b.note=b.note*a.id where a.id=b.id;
3、删除记录
单表删除:
delete from demo where name ='james';
多表删除:
delete a,b from demo [as] a,role [as] b where a.name=b.roleName and a.name='youzi';
DML查询语句
1、简单查询
(1)查询整表
select * from demo;
(2)查询指定字段,并给字段添加别名:
select name as '姓名',sex '性别',address '地址' from demo;
(3)查询去重复,distinct关键字
select distinct name '姓名',sex '性别',address '地址' from demo;
2、条件查询 where
select * from demo where name='李四';
select * from demo where name='李四' and age<25;
3、查询结果排序,order by
select * from demo where sex='男' order by age ASC , salary DESC;
语义:优先按age升序排列,年龄相同按salary降序排列。
4、查询结果限制行数,limit
(1)排序并限制只显示两行
select * from demo where sex='男' order by age ASC , salary DESC limit 2;
(2)限制从第2行起,显示两行
select * from demo where sex='男' limit 1,2;
5、聚合,group by,having
select name,sex,address '地区',count(1) '地区人数' from demo where salary<20000 group by address having sex='男';
having和where的区别在于where是在分组前进行筛选,having是在分组后进行筛选。
6、表连接,left/right join ,on
表连接分为内连接和外连接,内连接仅选出两张表互相匹配的记录,而外连接会选出其他不匹配的记录。外连接又分为左连接和右连接。
(1)内连接
select a.id demo_id,b.id role_id,roleName,note,sex from demo a,role b where a.name=b.roleName;
(2)外连接
- 左连接:包含所有左边表的记录,甚至是右边表中没有和它匹配的记录
- 右连接:包含所有右边表的记录,甚至是左边表中没有和它匹配的记录
select demo.id,name,sex,note from demo left join role on demo.name=role.roleName;
右连接与左连接同理
7、子查询,in ,not in,
有时进行查询的时候,需要的条件是另一个查询的结果,这个时候就要用到子查询。
select * from demo where id in(select id from role);
8、联合查询 union all, union
select id,name from demo union all select id,roleName from role;
select id,name from demo union select id,roleName from role;
UNION 和 UNION ALL的主要区别就是UNION ALL会将结果集直接合并在一起,UNION是将UNION ALL的结果进行一次distinct处理。
上一篇: php Ubb代码编辑器函数代码_PHP
下一篇: mysql数据到导入导出_MySQL