MySQL基础语句总结

本文全面介绍了SQL语句的四大类别:DDL、DML、DCL及查询语句,包括创建、修改和删除数据库及表的操作,数据的增删改查,条件语句,排序、分组及聚合函数的使用,连接查询,子查询,UNION及LIMIT的应用。深入探讨了各种约束和数据控制,提供丰富的示例帮助理解。
摘要由CSDN通过智能技术生成


SQL语句分类:

DDL 数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML数据操作语言(SELECT,DELETE,UPDATE,INSERT)
DCL数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

DDL 数据定义语言:

创建数据库:
CREATE DATABASE database-name;
删除数据库:
drop database name;

创建新表:
create table name(
columnName dataType(length),
…………………
columnName dataType(length)
);
根据已有的表创建新表:
create table tab_new like tab_old (使用旧表创建新表)
注意:
创建表的时候,表中有字段,每一个字段有:
* 字段名
* 字段数据类型
* 字段长度限制
* 字段约束
删除表:
drop table name;
如果表存在就删除此表
drop table if exists name;
查看建表语句:
desc name;
增加字段:
alter table name add columnName dataType(length);
修改字段:
alter table name modify columnName dataType(length)
删除字段:
alter table name drop columnName ;

DML数据操作语言:

添加数据:
insert into 表名(字段名1,…字段名n)values(数据1…数据n)
修改数据:
update 表名 set 字段名称1=需要修改的值1, 字段名称2=需要修改的值2 where …….
删除数据:
delete from 表名 where …
查找数据:
select * from 表名

约束语句:

非空约束:not null

  非空约束,针对某个字段设置其值不为空

唯一约束 :unique

唯一性约束,它可以使某个字段的值不能重复

主键约束:primary key

每个表应该具有主键,主键可以标识记录的唯一性,主键分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的

外键约束:froreign key

外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键

建表语句大全举例:

//class 表
create table class(
     c_id int(3),
     c_name varchar(20) not null,
     constraint pk_c_id primary key(c_id);
//student 表
create table student(
     s_id int(10),
    s_name varchar(50) not null,//非空约束
     sex char(2) default 'g',//设置默认值
    birthday date not null,//非空约束
   QQ varchar(15) unique,//唯一性约束
     c_id int(3) not null,//非控约束
    constraint pk_s_id primary key(s_id),//主键约束
    constraint fk_c_id foreign key(c_id) references class(c_id));//外键约束

在这里插入图片描述

在这里插入图片描述

DCL数据控制语言

条件语句:where

1  = 表示等于条件

select * from 表名 where 字段名 = 条件值;

2 <> 表示不等于 和!=等价

 select * from 表名 where 字段名 <> 条件值 ;

3 between 条件A and 条件B 等价于 字段名 >= 条件A and 字段名<=条件B

select * from 表名 where 字段名 between 条件A and 条件B

4 is null Null为空,但不是空串,为null可以设置这个字段不填值,如果查询为null的字段,采用is null

select * from 表名 where 字段名 is null;	

5 and 和 or and表示并且的含义,表示所有的条件必须满足,or,只要满足条件即可,相当于包含

select * from 表名 where 字段名A = 条件值A and 字段名B = 条件值B or 字段名C = 条件值C

注:关于运算符的问题:不用记,没有把握尽量采用括号
6 in和 not in表示包含的意思,完全可以采用or来表示,采用in会更简洁一些
not表示不包含的意思

select * from 表名 where 字段名 in(条件A,条件B)
select * from 表名 where 字段名 not 条件	

7 like Like可以实现模糊查询,like支持%和下划线匹配
%匹配任意字符出现的个数
下划线只匹配一个字符
Like 中的表达式必须放到单引号中|双引号中

select * from 表名 where 字段名 like ‘_A%’;

排序数据 order by

升序: asc
降序:desc
按照类字段排序

select * from 表名 order by 字段名 asc

多字段联合查询
注:如果采用多个字段排序,如果根据第一个字段排序重复了,会根据第二个字段排序

select * from 表名 order by 字段名A asc ,字段名B desc

分组函数/聚合函数/多行处理函数

count 取得记录数
sum 求和
avg 求平均值
max 求最大值
min 求最小值
注意:分组函数自动忽略空值,不需要手动的加where条件排除空值。
select count(*) from emp where xxx; 符合条件的所有记录总数。
select count(comm) from emp; comm这个字段中不为空的元素总数
注意:分组函数不能直接使用在where关键字后面
错误:

mysql> select ename,sal from emp where sal > avg(sal);
ERROR 1111 (HY000): Invalid use of group function

正确:

mysql> select ename,sal from emp where sal >(select avg(sal) from emp);

count:

采用count(*),取得所有记录,忽略null,为null的值也会取得 。
采用count(字段名称),不会取得为null的记录

sum:

Sum可以取得某一个列的和,null会被忽略	

avg:

取得某一列的平均值

max:

取得某个一列的最大值

min:

取得某个一列的最小值		

组合聚合函数:

可以将这些聚合函数都放到select中一起使用
select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;		

在这里插入图片描述

分组查询 group by

分组查询主要涉及到两个子句,分别是:group by和having
group by

select 字段名,分组函数 from 表名 group by 字段名 

如果想对分组数据再进行过滤需要使用having子句

select 字段名,分组函数 from 表名 group by 字段名 having  判断语句

分组函数的执行顺序:
根据条件查询数据
分组
采用having过滤,取得正确的数据

select语句总结:
select 字段 5
from 表名     1
where 条件语句  2
group by ....  3
having  ....  4//就是为了过滤分组后的数据而存在的—不可以单独的出现
order by ... 6

以上语句的执行顺序

  1. 首先执行where语句过滤原始数据
  2. 执行group by进行分组
  3. 执行having对分组数据进行操作
  4. 执行select选出数据
  5. 执行order by排序

原则:能在where中过滤的数据,尽量在where中过滤,效率较高。having的过滤是专门对分组之后的数据进行过滤的。

连接查询

连接查询:也可以叫跨表查询,需要关联多个表进行查询

内连接:

内连接指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
表1 inner join 表2 on 关联条件

select e.ename,e.sal ,d.dnam, from emp e join dept d on e.deptno = d.deptno where sal > 2000;
外连接:

外连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

左外连接 left outer join 或者 left join
右外连接 right puter join 或者 right join
左外连接 左边就是主表 右外连接右边就是主表
左外连接和右外连接就是在等值连接的基础上加上主表中的未匹配数据

//左外连接
select e.ename, e.sal, d.dname from dept d left join emp e on e.deptno=d.deptno;
//右外连接
select e.ename, e.sal, d.dname from emp e right join dept d on e.deptno=d.deptno;

以上两个查询效果相同 因为主表都是 dept

全外连接 full outer join 或者 full join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。

子查询

子查询就是嵌套的select语句,可以理解为子查询是一张表

在where语句中使用子查询,也就是在where语句中加入select语句
在from语句中使用子查询,可以将该子查询看做一张表
在select语句中使用子查询

举例:

//查询员工编号包含管理者编号的
select empno, ename from emp where empno in(select mgr from emp where mgr is not null);	
	//	取得大于平均薪水的员工
select empno, ename, sal from emp where sal > (select avg(sal) from emp);
//将部门的平均薪水作为一张表与薪水等级表建立连接,取得等级
select a.deptno,a.avg_sal,g.grade from (select deptno,avg(sal) avg_sal from emp group by deptno ) a join salgrade g on a.avg_sal between g.losal and hisal;
//查询员工信息,并显示出员工所属的部门名称
select e.ename, (select d.dname from dept d where e.deptno=d.deptno) as dname from emp e;

union

union可以合并集合(相加)

select * from emp where job='MANAGER'
union
select * from emp where job='SALESMAN'

limit 的使用

mySql提供了limit ,主要用于提取前几条或者中间某几行数据

select * from table limit m,n

其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。

select * from tablename limit 2,4

即取出第3条至第6条,4条记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值