MySQL2--SQL语句:DML和DQL语句(增删改;查:简单查询、多表查询;结果处理:分组、排序、限制、去重)

一、SQL语句分类

 1、DQL--数据查询语言:凡是select语句都是DQL【select】

 2、DML--数据操作语言:对表的数据进行增删改【insert、delete、update】

 3、DDL--数据定义语言:对表的结构的增删改【create、drop、alter】

 4、TCL--事务控制语言:事务相关的操作(transaction)【commit、rollback】

 5、DCL--数据控制语言:权限相关,grant 授权   revoke撤销权限

二、SQL语句规则

1、任何一条sal语句以”;“结尾

2、sql语句不区分大小写

3、字符串和中文要用单引号括起来

4、要查谁,select后面就跟着谁

三、增删改---DML语句

(一)表结构操作

  1、创建表

  create table 表名(字段名1 数据类型,字段名2 数据类型);

2、修改表

新增表字段

Alter  table 表名 Add(新列名 数据类型)

修改表字段

Alter  table 表名 change(列名 数据类型)

3、删除某列

drop table 列名 

4、删除大表

truncate table 表名   //不能回滚,永久丢失,只剩表头 

(二)表数据操作

1、添加数据

insert into 表名(字段1,字段2...)

                values(值1,值2...)

2、修改数据

update 表名 set 字段1=值1,字段2=值2...

where 条件; 

3、删除数据

delete from 表名 where 数据 

四、查询语句--DQL

(一)一般查询

1、简单语句

select  字段名1,字段名2,... from 表名

2、给查询结果重命名

select  字段名1,字段名2,... as 结果名  from 表名

select  字段名1,字段名2,... 空格 结果名  from 表名

(二)条件查询

1、基本形式

select

        字段1,字段2...

    from  

         表名

   where

         条件;

[注]执行顺序:先from,再where,最后select

2、区间查询---between...and...

 select

        字段1,字段2...

    from  

         表名

   where

         between...and...;

【注】between...and...表达范围:数字[,] 字符[,)

3、多条件---and or in

select 字段1,字段2... from 表 where 条件1 and/or  条件2

 select 字段1,字段2... from 表 where 字段 in(值1,值2...)

 select ename  from emp  where sal>1000 and(no=20 or no=30)

【注】当不知道两个运算符优先级不确定时,想要先执行的加小括号

          即,and和or连用时,需要加小括号

         and---查询结果是两个条件的交集

          or---查询结果是两个条件的并集

          in---在值集合中取值

4、模糊查询---like

   select 字段1,字段2... from 表 where 字段 like  ‘ 要查的’ 

【注】       % 代表任意多个字符

                  _  代表任意一个字符

                转义字符:/,让_只代表_,而不是任意一个字符

(三)分组查询--- group by,having

1、作用

     找出某一类的数据,对查询数据进行分类,筛选出某一类的结果【多表查询中常用】   

2、常用分组函数

count 计数

sum  求和

avg 平均值

max最大值

min 最小值

【注】

  •   分组函数都是对某一组数据进行操作的(同类数据)

3、group up和having

(1)字段

      group by:按照某个字段或某些字段进行分组

      having:对分组后的数据进行再次过滤(相当于where)

(2)分组函数和group by

  •    分组函数(count,sum,avg,max,min)一般都会和group by联合使用

          且在group by之后执行

  • 分组函数不能用在where子句中,

             因为,分组函数在group by之后执行,而group by要在where后执行,没有分组就不能用分组函数

  • 当一条语句中有group by,select后面只能跟分组函数参与分组的字段

          select  ename,max(sal),job from emp group by job(错误)

          select  max(sal),job from emp group by job(正确)

  • 多个字段联合分组,select后面能跟的是参与分组的字段

     找出每个部门不同工作岗位的最高薪资

select  deptno,job,max(sal)

  from emp

group by  deptno,job;

 4、having和where

  (1)一个语句中只有在有group by情况下才能出现having,在分组好的情况下再筛选

  (2)where  直接对数据表中字段进行筛选

           having  对筛选出的字段再筛选

(四)排序---order by

    select 字段1,字段2... from 表  

               order by 字段1  asc /desc ,字段2 asc /desc   

   order by...asc  升序 

   order by...desc 降序

(五)多表查询 

  1、内连接--inner jion...on..

   (1)等值连接--表连接条件是等量关系(=)

     from  表A(inner)jion 表 B 

                           on 表连接条件(=)

                           where 数据筛选条件

   (2)非等值连接--表连接条件是非等值关系(区间)

     from  表A(inner)jion 表 B 

                           on 表连接条件(between..and..)

                           where 数据筛选条件

     (3) 自连接--一张表看作两张表(取不同的别名),自己连接自己

 select a.name as "员工",b.name as "领导名"

    from emp a jion emp b

                        on a.mgr=b.empno

  2、外连接--left right  outer jion...on..

  (1)左连接---left jion..on...jion 之前的表是主表

       from  表A left(outer)jion 表 B 

                           on 表连接条件(between..and..)

                           where 数据筛选条件

  (2)右连接---right jion..on...jion 之后的表是主表

from  表A right(outer)jion 表 B 

                           on 表连接条件(between..and..)

                           where 数据筛选条件

3、内外连接区别

    (1) 内连接:凡是A表和B表能够将匹配上的记录查询出来,就是内连接,

                       AB表没有主副之分,两张表是平等的

        外连接:两个表中一个是主表,一个是副表, 主要查询主表中的数据,

                     捎带查询副表中的数据,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出null与之匹配(保证数据不会少)

  (2)内连接---当数据值为null时,容易丢失数据

      外连接---主表的数据值为null也不会丢失数据

(3)内连接  inner jion ...on... inner可省略

         外连接  left/right  outer jion...on...  outer可省略,left right不可shenglue

(4)区分内外连接看有无left或right

          外连接必有left或right

4、三表连接

 from  A    jion B

                on AB表连接条件

                 jion C

                on AC表连接条件

      A表和B表先进行连接,连接之后,A再和C连接 

5、七种表连接总结

(1)内连接---共有部分

     select * from A inner jion B on A.key=B.key 

                                          

 (2)左连接:独A+共有部分

    select * from A left jion B on A.key=B.key

                                               

 (3)右连接:独B+共有部分

   select * from A right jion B on A.key=B.key

                                              

(4) A的独有---B只能是null,左连接去掉共有部分

  select * from A left jion B on A.key=B.key

   where  B.key is NULL

                                               

(5) B的独有--右连接去掉共有部分

select * from A right jion B on A.key=B.key

 where  A.key is NULL

                                                 

 (6)全连接

select * from A full outer jion B on A.key=B.key

                                             

(7) A、B各自的独有

 select * from A full outer jion B on A.key=B.key

  where A.key is NULL or B.key is NULL

                                                

【注】两表连接查询时候,在没有任何条件限制情况下会出现笛卡尔积现象,

           即最终的查询结果条数是两张表记录条数的乘积

   避免:加连接条件 jion..on 表连接条件

(六)结果处理

  1、分页查询---limit   

(1)语法机制

       limit  startIndex,length

        startIndex---起始位置

        length------取几个

       [注]当默认从0开始时,只写一个数字,为取的长度

   例:取出工资前5名

   select name,sal from emp order by sal desc  limit 0,5;

(2)分页显示结果

          每页显示pageSize条记录

          第pageNo页:limit(pageNo-1)*pageSize,pageSize

                                    pageSize----每页显示多少条记录

                                    pageNo-----显示第几页

java 代码{

   int pageNo=2;//页码

   int pageSize=10;//每页显示条数

   limit (pageNo-1)*pageSize,pazeSize //每页对应显示的数据

}

(3)limit是mysql特有的,其他数据库中没有,不通用

            oracle中有一个相同的机制,叫做rownum

2、结果集拼接--union

(1)将查询的结果集相加

(2)条件:两个相加的结果集列数要一致

(3)作用:or和in连接不了的结果集,可以用union,

               即可以连接不相关的两个表的查询结果

三种结果拼接方式:

找出工作岗位是saleman和manager的员工

1、select name,job from emp where job='saleman' or job='manager';

2、select name,job from emp where job in('saleman' ,manager');

3、select name,job from emp where job='saleman'

      union

      select name,job from emp where job='manager';

3、结果集去重---distinct

 (1)distinct只能出现在所有字段的最前面,表示后面字段的联合去重

 (2)去除重复记录

      select distinct job from emp;

      select distinct dno, job from emp;

      select dno,distinct  job from emp;(错误)

  

 四、SQL语句的书写顺序和执行顺序

  1、书写顺序

    select...

    from...

    where...

    group by...

    having...

    order by...

    limit...

2、执行顺序

  from 

  where  条件

  group by  分组

  having   分组后字段筛选

  select  字段

   order by    acs desc  对结果排序

   limit...对结果集截取(如取结果前20个)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值