SQL基础使用
DDL 语句
创建数据库
CREATE DATABASE dbname;
查询已有数据库
show database;
使用数据库
use dbname;
查看数据库中的表
show tables;
删除数据库
drop database dbname;
创建表
CREATE TABLE 表名称 (
列名称1 数据类型 约束,
........
);
删除表
// 可以通过日志恢复.
drop table job;
// 删除后,不可恢复.
tuncate table 表名;
修改表
// 将job 表中的 name 由 varchar(20) 改为 varchar(25).
alter table job modify name varchar(25);
// 对表结构进行修改,增加一个字段.
alter table job add home varchar(30);
// 删除 home 字段.
alter table job drop column home;
// 对表中的字段名称进行修改,把 wage 改为 salary.
alter table job change wage salary decimal(10,2);
// 对表名进行修改,将 job 表改为 worker.
alter table job rename worker;
DML 语句 (增、删、改)
插入语句
INSERT INTO tablename (column1,column2,...) values(value1,value2,...);
insert into tablename values(value1,value2,...);
更新记录
update tablename set column1 = value1,column2 = value2,....;
删除记录
delete from tablename [where condition]
// 清除表中的所有的数据
delete from tablename;
DQL 语句
SELECT 语句
// 从表中查询所有的数据
select * from tablename;
// 从表中查询指定的字段
select column1,column2,column3,column4,... from tablename;
DISTINCT 去重
// 对指定的列名进行去重操作
select distinct column from tablename;
WHERE 条件查询
// 单条件查询
select * from tablename where column = #{value};
// 比较运算符
> 、 < 、 >= 、 <= 、 !=
// 多条件查询
select * from tablename where column1 = #{value1} and column2 = #{value2};
排序
// DESC按照字段进行降序排列,ASC按照字段进行升序排列,默认使用 DESC 排列,order by 后面可以跟多个排序字段,且每个排序字段可以有不同的排序顺序.
select * from tablename where condition order by column1 desc | ASC;
限制
// 只取前三条记录
select * from tablename limit 3;
// 取排序后的前三条记录
select * from tablename order by column limit 3;
// 从指定记录开始取,比如从第二条开始取,取三条记录. limit 和 order by 语法一起实现分页查询.
select * from tablename order by column desc limit 2,3;
聚合
对记录进行汇总的操作主要有
1、汇总函数,比如 sum 求和、count 统计数量、max最大值、min最小值等。
2、group by,关键字表示对分类聚合的字段进行分组,比如按照部门统计员工的数量,那么 group by 后面就应该跟上部门。
3、with 是可选的语法,它表示对汇总之后的记录进行再次汇总。
4、having 关键字表示对分类后的结果再进行条件的过滤。where 是使用在统计之前,对统计前的记录进行过滤,having 是用在统计之后,是对聚合之后的结果进行过滤。也就是说,where 永远用在 having 之前,我们应该先对筛选的记录进行过滤,然后再对分组的记录进行过滤。
// 可以对 job 表中员工薪水进行统计,这个表示总共的薪水。
select sum(salary) from job;
// 最大薪水和最小薪水
select max(salary),min(salary) from job;
// 统计 job 表中人员的数量。
select count(1) from job;
// 按照 job 表中的年龄来进行对应的统计.
select age,count(1) from job group by age;
// 既统计各年龄段的人数,又要统计总人数。
select age,count(1) from job group by age with rollup;
// 统计数量大于1的记录.
select age,count(1) from job group by age with rollup having count(1) > 1;
表连接
表连接一般体现在表之间的关系上,当需要同时显示多个表中的字段时,就可以用表连接来实现。
// 内连接
// 查询出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作类型。
select job.name,job_type.name from job,job_type where job.type = job_type.type;
内连接:选出两张表中互相匹配的记录。
外连接:不仅选出匹配的记录,也会选出不匹配的记录。
外连接分为两种:
左外连接:筛选出包含左表的记录并且右表没有和它匹配的记录。
右外连接:筛选出包含右表的记录并且左表没有和它匹配的记录。
// 查询出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作类型。左外连接查询
select job.name,job_type.name from job left join job_type on job.type = job_type.type;
// 右外连接查询
select job.name,job_type.name from job right on job.type = job_type.type;
子查询
有一些情况,我们需要的查询条件是另一个SQL语句的查询结果,这种查询方式就是子查询,子查询有一些关键字比如 【in,not in,= 、!= 、exists 、 not exists】等。
// 通过子查询查询出每个人的工作类型。
select job.* from job where type in (select type from job_type);
// 如果子查询数量唯一的话,可以用 = 代替 in.
select * from job where type = (select type from job_type);
// 子查询不唯一,我们使用 limit 限制一下返回的记录数.
select * from job where type = (select type from job_type limit 1,1);
联合查询
将两表的数据单独查询出来之后,将结果合并到一起进行显示,这个时候就需要 UNION 和 UNION ALL 这个两个关键字来实现这样的功能,UNION 和 UNION ALL 的主要区别是 UNION ALL 是把结果集直接合并在一起,而 UNION 是将 UNION ALL 后的结果进行一次 DISTINCT 去除掉重复数据。
// 将显示 job 表和 job_type 表的所有的 type 字段的值.
select type from job union all select type from job_type;
// UNION 是对 UNION ALL 使用了 DISTINCT 去重处理.
select type from job union select type from job_type;