MySQL基础——DQL语言

1.为什么需要数据库?

(1)持久保存数据(数组、集合)(2)完整的管理系统,便于查询(文件)

2.DB、DBMS、SQL

数据库DB: database 存储数据的仓库,保存了一系列有组织的数据。

数据库管理系统DBMS: database management system 通过数据库管理系统创建和操作数据库

结构化查询语言SQL: structure query language 专门用来与数据库通信的语言

3.MySQL服务启动/停止

cmd管理员身份运行--->启动:net start MySQL80--->停止:net stop MySQL80

4.MySQL服务的登录和退出

cmd管理员身份运行--->mysql [-h localhost(主机名) -p3306(端口号)] -u root(用户名) -pxxxxx(密码)

5.MySQL常用命令

(1)查看当前所有的数据库:show databases;

(2)打开指定数据库:use 库名;

(3)查看当前库的所有表:show tables;

(4)查看其它库的所有表:show tables from 库名;

(5)创建表:create table 表名(

         列名 列类型,

         列名 列类型,

         ......

         );

(6)查看表结构:desc 表名;

6.MySQL语法规范

(1)不区分大小写,建议关键词大写,表名、列名小写

(2)以分号结尾

(3)可缩进,换行

(4)注释   单行:#注释   或  -- 注释   

                    多行:/*注释*/

7.条件查询

语法:select 查询列表 from 表名 where 筛选条件;

筛选条件:(1)>,<,=,!=,<>,>=,<=   (2)&&,||,~,and,or,not  (3)模糊查询 like,between and,in,is null,is not null

8.排序查询

语法:select 查询列表 from 表名 where 筛选条件 order by 排序列表 asc|desc;

order by 后排序列表可支持 单个字段、多个字段、表达式、函数、别名

9.常用函数

格式:select 函数名(实参列表)[from 表]

分类:(1)单行函数 concat、length、isnull (2)分组/组/聚合/统计函数(用于统计)

1.1字符函数

select length、concat、upper/lower、substr/substring(索引从1开始)、instr(返回字串第一次出现的索引,找不到返回0)、trim(去前后空格)、lpad/rpad(用指定的字符实现左/右填充指定长度)、replace(替换)

1.2数学函数

select round、ceil、floor、truncate(截断)、mod(取余)mod(a,b)=a-a/b*b

1.3日期函数

select now(日期+时间)、curdate(日期)、curtime(时间)、year、month......

select str_to_date:将日期格式的字符转换为指定格式的日期 

                                 e.g.  str_to_date('9-13-1999','%m-%d-%Y')  --->  1999-09-13

select date_format:将日期转换为字符

                                 e.g.  date_format('2018/6/6','%Y年%m月%d日') --->  2018年06月06日

1.4流程控制函数

if函数:if else效果    e.g.select if(10<5,'大','小')

case函数:(1)switch case效果   (2)类似于多重if

(1)格式:case 要判断的字段或表达式

               when 常量1 then 要显示的值1或语句1

               when 常量2 then 要显示的值2或语句2

               ......

               else 要显示的值n或语句n

               end

(2)格式:case

               when 条件1 then 要显示的值1或语句1

               when 条件2 then 要显示的值2或语句2

               ......

               else 要显示的值n或语句n

               end

2.分组/聚合、统计函数

sum、avg:一般用于处理数值型

max、min、count(计算个数):可以处理任意类型

所有分组函数都忽略null值,可以和distinct搭配使用

count(*)/count(1)/count(字段):统计行数

10.分组查询

语法:

select 分组函数,列(要出现在group by 后面)

from  表

[where 筛选条件]

group by 分组列表

[order by 子句]

 数据源位置关键字
分组前筛选原始表group by句前where
分组后筛选分组后的结果集group by句前having

(1)分组函数做条件一定放在having子句中

(2)group by 支持多个字段分组,用逗号隔开

11.连接/多表查询(查询字段来自多个表)

1.sql92标准

笛卡尔乘积现象:表1有m行,表2有n行,结果=m*n行     发生原因:没有有效的连接条件

分类:(1)内连接:等值连接、非等值连接、自连接

          (2)外连接:左外连接、右外连接、全外连接

          (3)交叉连接

为表起别名:(1)提高语句的简洁度(2)区分多个重名的字段

注意:如果为表起了别名,则查询字段就不能用原来的表名去限定

2.sql99标准

sql99可实现连接条件和筛选条件的分离,可读性较高

语法:

select 查询列表

from  表1  别名 

[连接类型]    join   表2  别名

on     连接条件

[where 筛选条件]

[group by 分组]

[having 筛选条件]

[order by 排序列表]

分类

(1)内连接:inner (可省略)        等值连接、非等值连接、自连接

(2)外连接 :左外:left     右外:right     全外:full

外连接应用场景:用于查询一个表中有,另一个表没有的记录

外连接特点

1.外连接的查询结果为主表中的所有记录

如果从表中有和它匹配的,则显示匹配的值

如果从表中没有和他匹配的,则显示null

外连接查询结果=内连接结果+主表中有而从表中没有的记录

2.左外连接:left join 左边的是主表

右外连接:right join 右边的是主表

(3)交叉连接:cross  笛卡尔乘积

              内连接                           左外连接                           右外连接

 

12.子查询

含义:出现在其他语句中的select语句,称为子查询或内查询,外部的查询语句,称为主查询或外查询

子查询放在小括号内,一般放在条件的右侧

分类

按子查询出现的位置:

select 后面:标量子查询

from后面:表子查询       将子查询结果充当一张表,要求必须起别名

where或having后面*:

标量子查询(单行)*:一般搭配单行操作符使用>,<,>=,<=,=,<>

列子查询(多行)*:一般搭配多行操作符使用 in/not_in、any/some、all

行子查询

exists后面:表子查询(相关子查询)    语法:exists(完整的查询语句)  结果:1或0

按结果集的行列数:标量子查询(结果集只有一行一列)、列子查询(结果集只有一列多行)、行子查询(结果集只有一行多列或多行多列)、表子查询(结果集一般为多行多列)

13.分页查询

select 查询列表

from  表1  别名 

[连接类型]    join   表2  别名

on     连接条件

[where 筛选条件]

[group by 分组]

[having 筛选条件]

[order by 排序列表]

limit [offset],size

offset:要显示条目的起始索引(起始索引从0开始)    size:要显示的条目个数

14.联合查询

union联合  合并:将多条查询语句的结果合并成一个结果

语法:

查询语句1

union

查询语句2

union

......

应用场景:要查询的结果来自于多个数,且多个表没有直接的连接关系,但查询的信息一致时

特点:

1.要求多条查询语句的查询列数是一致的;

2.要求多条查询语句的查询的每一列的类型和顺序最好一致;

3.union关键字默认去重,如果使用union all可以包含重复项

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值