MySQL,SQL语句大全(包含例子)

SQL语法

DDL(数据库)

创建数据库:

create database 名称;

eg:创建一个db01数据库

create database db01;

查询所有数据库:

注意查询所有数据库的时候database后面有s

show databases;

查询当前数据库:

查询当前正在使用哪个数据库

select database();

创建数据库:

create database后面可以添加可选项(如果不存在再创建,如果存在不会创建也不会报错)

create database[if not exists]数据库名;

eg:如果没有db01数据库则创建

create database[if not exists] db01;

使用数据库:

use 数据库名;

删除数据库:

drop database后面可以添加可选项(如果存在就删除,如果不存在不会删除也不会报错)

drop database[if exists]数据库名;

eg:如果db01数据库存在则删除db01数据库

drop database[if exists]db01;

[database可以替换成schema]

DDL(表)

创建表:

[comment 表注释] :给这张表添加注释信息这张表是添加什么数据的(备注)

[comment 字段1注释]:描述这个字段是用来干什么的

create table 表名{

字段1 字段类型[约束] [comment 字段1注释],

......

字段n 字段类型[约束] [comment 字段n注释]

}[comment 表注释];

约束:

非空约束 限制该字段不能为null notnull

唯一约束 保证字段的所有数据都是唯一、不重复的 unique

主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key(auto_increment自增)

默认约束 保存数据时,如果未指定该字段值,则采取默认值 default

外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key

eg:创建一个含有id(主键),username(非空,唯一),name(非空),age,gender(默认男)的用户表

create table tb_User(
    id int primary key auto_increment comment 'ID,唯一标识,让主键自动向上增长',
    username varchar(20) not null unique comment '用户名,最多只能存储20位,非空且唯一',
    name varchar(10) not null comment '姓名,最多只能存储10位,非空',
    age int comment '年龄',
    gender char(1) default '男' comment '性别,最多只能存储1位,默认值男'
)comment '用户表';

表操作:

查询:

查询当前数据库所有表:show tables;(注意查询所有表时tables后面有s)

查询表结构:desc 表名;

eg:查询ks_emp表结构

desc ks_emp

查询建表语句:show create table 表名;

eg:查询sd_emp建表语句

show create table sd_emp

修改:

添加字段:alter table表名 add 字段名 类型(长度)[comment 注解] [约束];

eg:修改:为表ks_emp 添加字段 qq varchar(11)

alter table ks_emp add qq varchar(11) comment 'QQ';

修改字段类型:alter table表名 modify 字段名 新数据类型(长度);

eg:修改:修改ks_emp 字段类型 qq varchar(13)

alter table ks_emp modify qq varchar(13) comment 'QQ';

修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注解] [约束];

eg:修改:修改ks_emp 字段名 qq 为 qq_num varchar(13)

alter table ks_emp change qq qq_num varchar(13) comment 'QQ';

删除字段:alter table表名 drop column字段名;

eg:修改:删除ks_emp 的 qq_num 字段

alter table ks_emp drop column qq_num;

修改表名:rename table表名 to新表名

eg:修改:将ks_emp 表明修改为emp

rename table ks_emp to emp;

删除:

删除表:drop table[if exist] 表名;

eg:删除ks_emp 表

drop table[if exist] ks_emp;

DML:

insert:

指定字段添加数据:insert into 表名 (字段名1,字段名2)values(值1,值2);

eg:为ks_emp 表的username,name,gender字段插入值

insert into ks_emp (username,name,gender,create_time,up_data) values ('Tom','汤姆',1,now(),now());

全部字段添加数据:insert into 表名 values(值1,值2,......);

eg:为ks_emp 表的所有字段插入值

insert into ks_emp values(null,'jerry','1234','杰瑞',2,'I love you',1,'2001-11-03',now(),now());

批量添加数据(指定字段):insert into表名(字段名1,字段名2)values(值1,值2),(值1,值2);

eg:批量为 ks_emp 表的username,name,gender 字段插入数据

insert into ks_emp (username,name,gender,create_time,up_data) values('zhiruo','周芷若',2,now(),now()),('wuji','张无忌',1,now(),now());

批量添加元素(全部字段):insert into表名values(值1,值2),(值1,值2);

update:

修改数据:update 表名 set 字段名1 = 值1,字段名2 = 值2,.........[where 条件];

eg:将ks_emp 表的Id为2员工 姓名name字段更新为'张三'

update ks_emp set name = '张三' where Id = 2;

delete:

删除数据:delete from 表明[where 条件];

eg:删除ks_emp 表中 ID为2的员工

delete from ks_emp where Id = 2;

eg:删除tb_emp 表中的所有员工

delete from ks_emp;

DQL:

基本查询:(select)

查询多个字段:select 字段1,字段2,字段3 from 表名;

eg:查询指定字段name,entrydate并返回

select name,entrydate from tb_emp;

查询所有字段(通配符):select * from 表名;

eg:查询返回所有字段

select * from tb_emp;

设置别名:select 字段1 [as 别名 1],字段 2 [as 别名2] from 表名;

eg:查询所有员工的name,entrydate,并起别名(姓名、入职日期)

select name as 姓名, entrydate as 入职日期 from tb_emp;

去除重复记录:select distinct 字段列表 from 表名;

eg:查询已有的员工关联了哪几种职位(不要重复)

select distinct job from tb_emp;

条件查询:(where)

条件查询:select 字段列表 from 表名 where 条件列表;

比较运算符(java没有的):

between...and... 在某个范围范围之内(含最小、最大值)

in(...) 在in之后的列表中的值,多选一

like 占位符 模糊匹配(_匹配单个字符,%匹配任意个字符)

is null 是null

逻辑运算符:

and 或 && 并且(多个条件同时成立)

or 或 || 或者(多个条件任意一个成立)

not 或 ! 非,不是

eg:查询 姓名 为 杨逍 的员工

select name from tb_emp where name = '杨逍';

eg:查询 id小于等于5 的员工信息

select * from tb_emp where id <= 5;

eg:查询 没有分配职务 的员工信息

select * from tb_emp where job is null;

eg:查询 有职位 的员工信息

select * from tb_emp where job is not null;

eg:查询 密码不等于'123456'的员工信息

select * from tb_emp where password != '123456';

或者select * from tb_emp where password <> '123456';

eg:查询 入职日期 在 '2000-01-01'(包含)到'2010-01-01'之间的员工信息

select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';

eg:查询 入职时间 在 '2000-01-01'(包含)到'2010-01-01'之间 且 性别为女的员工信息

select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' && gender = 2;

eg:查询 职位是 2,3,4的员工信息

select * from tb_emp where job = 2 || job = 3 || job = 4;

或者select * from tb_emp where job in (2,3,4);

eg:查询 姓名 为两个字的员工信息

select * from tb_emp where name like '__';

eg:查询 姓'张' 的员工信息

select * from tb_emp where name like '张%';

分组查询:(group by)

聚合函数:

select 聚合函数(字段列表) from 表名;

聚合函数:不对null值进行运算,count推荐使用count(*)

count 统计数量

max 最大值

min 最小值

avg 平均值

sum 求和

eg:统计该企业员工数量

count(字段)

select count(id) from tb_emp;

count(常量)

select count(0) from tb_emp;

count(*)

select count(*) from tb_emp;

eg:统计该企业最早入职的员工

select min(entrydate) from tb_emp;

eg:统计该企业最迟入职的员工

select max(entrydate) from tb_emp;

eg:统计该企业员工 ID 的平均值

select avg(id) from tb_emp;

eg:统计该企业员工的 ID 之和

select sum(id) from tb_emp;

分组查询:

select 字段列表 from 表名[where 条件] group by 分组字段名 [having 分组后过滤条件];

eg:根据性别分组,统计男性和女性员工的数量

select gender,count(*) from tb_emp group by gender;

eg:先查询入职时间在'2015-01-01'(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位

select job,count() from tb_emp where entrydate <= '2015-01-01' group by job having count() >= 2;

排序查询:(order by)

排序查询:select 字段列表 from 表名[where 条件列表] [group by分组字段]order by 字段1 排序方式1,字段2 排序方式2....;

ASC:升序(默认值)

DESC:降序

eg:根据入职时间,对员工进行升序排序 -asc

select * from tb_emp order by entrydate;

eg:根据入职时间,对员工进行降序排序

select * from tb_emp order by entrydate DESC;

eg:根据 入职时间 对公司的员工进行 升序排序,入职时间相同,再按照 更新时间 进行降序排序

select * from tb_emp order by entrydate ,update_time DESC;

分页查询:(limit)

分页查询:select 字段列表 from 表名 limit 起始索引,查询记录数;

eg:从 起始索引0 开始查询员工数据,每页展示5条数据

select * from tb_emp limit 0,5;

或select * from tb_emp limit 5;

eg:查询 第一页 员工数据,每页展示5条记录

select * from tb_emp limit 0,5;

eg:查询 第二页 员工数据,每页展示5条记录

select * from tb_emp limit 5,5;

起始索引 = (页码 - 1)* 每页展示记录数

外键:

物理外键语法:

创建表时指定:

create table 表名(

字段名 数据类型,

....

[constraint] [外键名称] foreign key(外键字段名) references 主表(字段名)

);

建完表后,添加外键:

alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(字段名)

多表查询:

select 字段名 from 表名,表名;

连接查询:

内连接:

相当于查询A、B交集部分数据

隐式内连接:

select 字段列表 from 表1,表2 where 条件......;

eg:查询员工的姓名,及所属的部门名称(隐式内连接实例)

select e.name, d.name from tb_emp e,tb_dept d where e.dept_id = d.id;

显式内连接:

select 字段列表 from 表1[inner] join 表2 on 连接条件......;

eg:查询员工的姓名,及所属的部门名称(显示内连接实例)

select e.name, d.name from tb_emp e inner join tb_dept d on e.dept_id = d.id;

外连接:

左外连接:

查询左表所有数据(包括两张表交集部分数据)

select 字段列表 from 表1 left[outer] join 表2 on 连接条件...;

eg:查询员工表 所有 员工的姓名,和相对应的部门名称(左外连接)

select e.name, d.name from tb_emp e left join tb_dept d on e.dept_id = d.id;

右外连接:

查询右表所有数据(包括两张表交集部分数据)

select 字段列表 from 表1 right[outer] join 表2 on 连接条件...;

eg:-- 查询部门表 所有 部门的名称,和对应的员工名称(右外连接)

select d.name,e.name from tb_emp e right join tb_dept d on e.dept_id = d.id;

子查询:

select * from t1 where column1 = (select column1 from t2.....);

标量子查询:

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式

eg:查询"教研部"的所有员工信息

select * from tb_emp where dept_id = (select id from tb_dept where tb_dept.name = '教研部');

eg:查询在"方东白"入职之后的员工信息

select * from tb_emp where entrydate > (select entrydate from tb_emp where name = '方东白');

列子查询:

子查询返回的结果是一列(可以是多行)

eg:查询"教研部"和"咨询部"的所有员工信息

select * from tb_emp where dept_id in (select id from tb_dept where name = '教研部' || name = '咨询部');

行子查询:

子查询返回的结果是一行(可以是多列)

eg:查询与"韦一笑"的入职日期 及 职位都相同的员工信息;

select * from tb_emp where (job,entrydate) = (select job,entrydate from tb_emp where name = '韦一笑');

表子查询:

子查询返回的结果是多行多列,常作为临时表

eg:查询入职日期是"2006-01-01" 之后的员工信息,及其部门名称

select e.*,d.name from (select * from tb_emp where entrydate > '2006-01-01') e,tb_dept d where e.dept_id =d.id;

事务

开启事务:start transaction; /begin;

提交事务:commit;

回滚事务:rollback;

索引

创建索引:create[unique] index 索引名 on 表名(字段名);

查看索引:show index from表名;

删除索引:drop index 索引名 on 表名;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomStudyJava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值