数据库笔记(观老杜)

SQL语句分类:

DQL:数据查询语言(凡是带有select关键字的都是查询语句) select...

DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML) insert 增 delete删 update 改

DDL:数据定义语言(凡是带有create、drop、alter的都是DDL。)操作表结构。不是表中数据

create:新建==增 alter:修改 drop:删除

TCL:事务控制语言 包括:事务提交:commit 事务回滚:rollback

DCL:数据控制语言 例如:授权grant、撤销权限revoke

个人建议:不需要记住谁是哪类,会用就行,知道select是查询,insert是增加即可

简单查询

查询一个字段:

select 字段名 form 表名;

注:select和from都是关键字。字段名和表名都是标识符

查询俩个或多个字段

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

注:字段名之间“  ,”号隔开即可

查询所有字段:1.把所以字段全部写上        2.用 * 号来表示

select * from 表名;

缺点:1.效率低        2.可读性差,在实际开发中不建议

起别名:

select 字段名1,字段名2 as 别名 from 表名;

select 字段名1,字段名2 as ‘别名’ from 表名;

select 字段名1,字段名2  别名 from 表名;

字段可以使用数学表达式:

select 字段名*12 from 表名;

条件查询:

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

数据库笔记(观老杜)

select 字段名1,字段名2 from 表名 where 字段名 >=1000 and 字段名 <= 2000;

等同于

select 字段名1,字段名2 from 表名 where 字段名 between 1000 and 2000;

注:使用between and 的时候必须遵循左小右大,是闭区间,包含俩端值

注:当and和or同时出现时,and的优先级高,如果想让or先执行可以加小括号

模糊查询:

查询名字中带有‘o’的

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

查询第二个字母带有‘A’的

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

查询名字中带有‘_’的

select * from 表名 where 字段名 link ‘%\_%’;

排序

排序默认是升序(asc)

select 字段名 from 表名 order by 所要排序的字段名;

降序:

select 字段名 from 表名 order by 所要排序的字段名 desc;

多字段排序:

select 字段名1,字段名2 from 表名 order by 字段名1 asc,字段名2 asc;

注:以第一个起主导,只有第一个相等时,才会考虑启用第二个(例:以工资升序排序,当工资一样时,以第二个升序排序)

数据处理函数:

数据处理函数又叫单行处理函数

单行处理函数的特点:一个输入对应一个输出

和单行处理函数相对的是:多行处理函数,(多行处理函数特点:多个输入对应,一个输出)

数据库笔记(观老杜)

concat 函数进行字符串拼接 

select concat(拼接内容1,拼接内容2)from 表名;
select 函数名(要处理的字段名) from 表名;

注:NULL只要参与运算,最终结果一定是NULL。为避免这个现象,所以要使用ifunll函数

ifnull函数用法:ifnull(字段名,被当做那个值)

分组函数(多行处理函数):

特点:输入多行,输出一行。

count  计数

sum  求和

avg   平均值

max  最大值

min   最小值

注:分组函数在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,那么整张表默认为一组。

分组函数注意点:1、分组函数自动忽略NULL

2、分组函数中count(*)和count(具体字段)有何区别?

        count(具体字段):表示统计该字段下所有不为NULL的元素的总数。

        count(*):统计表当中的总行数。(只要有一行数据count则++)

3、分组函数不能够直接使用在where子句中。因:分组函数的使用需要分组,而where后面还没有分组,SQL的执行顺序为:(1)from (2)where  (3)group by  (4)select  (5)order by  

4、所有的分组函数可以组合起来使用。

分组查询:

注:在一个select语句中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数,其他的一律不能跟。

多字段分组查询:

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

使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。

优化策略:where和having,优先选择where,where实在完成不了了,再选择having。

大总结(单表查询):

select ... from ... where ... group by ... having... order by ...;

执行顺序:

1、from

2、where

3、group by

4、having

5、select

6、order by

去除查询结果的重复记录

注:原表数据不会被修改,只是查询结果去重。关键字为distinct

select distinct 字段名 from 表名;

distinct只能出现在所有字段的前方(有多字段,表示多字段联合去重)

连接查询:

1、概念:从一张表中单独查询,称为单表查询。多张表联合起来查询数据,被称为连接查询。

2、根据表连接的方式进行分类:

        内连接:inner表示内连接,可以省略。

                等值连接:

SQL92语法
select 表1字段,表2字段 from 表1,表2 where 表1.条件字段 = 表2.条件字段;
SQL99语法
select 表1字段,表2字段 from 表1 inner join 表2 on 表1.条件字段 = 表2.条件字段;

                非等值连接:条件不是一个等量关系的,称为非等值连接

                自连接:自己连接自己,即一张表。技巧:一张表看成两张表

select 别名1.字段1,别名2.字段2 from 表名 别名1 join 表名 别名2 on 条件

        外连接:outer 也是可以省略的    产生了主次关系(任意的左连接都有右连接的写法,反之也是)

                左外连接(左连接):left: 表示将join左边的这张表看成主表,将主表数据全部查询出来,捎带关联查询右边的表

r

                右外连接(右连接):right表示:表示将join右边的这张表看成主表,将主表数据全部查询出来,捎带关联查询左边的表

select ... from 表1 right join 表2 on 条件

        全连接(很少用)

3、当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积。这种现象被称为:笛卡尔积现象。

4、如何避免笛卡尔积现象(加限制条件呗)

注:最终显示结果减少,但是匹配次数还是两张表条数的乘积。

注:外连接的查询结果条数一定是 >= 内连接的查询结果条数

三表或者多表连接:

select 
    ... 
from 
    a 
join 
    b 
on 
a和b的连接条件 
join 
    c 
on 
a和c的连接条件 
join 
   d 
on 
a和d的连接条件

子查询:

       1、概念: select语句中嵌套select语句,被嵌套的select语句称为子查询。

        2、可以出现在哪个位置?          

select ..(select).
from ..(select).
where ..(select).

        3、where子句中的子查询

where后面不能跟分组函数
如果where后面的条件是a>最小数(不可以写成where a>min(b))
故可以写成
select ... from ... where a> (select min(b) from ...);

        4、from子句中的子查询

                from后面的子查询,可以将子查询的查询结果当做一张临时表。

数据库笔记(观老杜)

数据库笔记(观老杜)

        5、select子句中的子查询(了解)

union:合并查询结果集

select 字段1 from 表名 where 条件1
union
select 字段1 from 表名 where 条件2

注:union的效率要高一些,对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积现象,成倍的翻。但是union可以减少匹配的次数。在减少匹配次数的情况下,还可以完成俩个结果集的拼接 。

uion使用要求:俩个结果集的列数相同。

limit:是将查询结果集的一部分取出来,通常用在分页查询中。

select ... from ...order by ... limit 0,5;

注:起始下标从0开始,长度为5。若limit 5则表示取前五。

分页公式:

limit (页数-1)*长度,长度;

表的创建:

1、建表的语法格式:(表名建议以t_或者 tbl_开始)

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

2、关于mysql中的数据类型(常见)

        1、varchar(最长255)

                可变长度的字符串,节省空间。会根据实际数据长度动态分配空间。

        2、char(最长255)

                定长字符串,不管实际长度是多少,分配固定的空间去存储数据。有时候会照成浪费。

                char比varchar的速度快

        3、int(最长11)

        4、bigint        长整数

        5、float

        6、double

        7、date        短日期类型

        8、datetime        长日期类型

        9、clob:字符大对象,最多可以存储4G的字符串。超过255个字符的都要采用CLOB来存储  

        10、blob:二进制大对象,专门来存储图片、声音、视频等流媒体数据。使用IO流才能插入

删除表

drop table 表名;
当这张表不存在的时候会报错
当这张表存在的时候删除
drop table if exists 表名;

上一篇:数据表操作----- > 增删改查


下一篇:MySQL学习