首页 » 数据库 » MySql

MySQL_基本概念&DQL查询语言

MySql 2021-12-28

目录

一、数据库的好处

二、数据库相关概念

三、数据库存储数据的特点

四、MYSQL服务的启动和停止

五、MySQL常见命令

六、MysSQL的语法规范

七、基础查询

1.介绍

2.查询方式

3.补充

八、条件查询

1.介绍

2.操作符分类

3.like 介绍

4.between and 介绍

5.in 介绍

6.is (not) null 介绍

九、排序查询

1.介绍

十、分组查询

1.分组函数

2.分组查询介绍

十一、连接查询

1.介绍

2.分类

3.笛卡尔积(笛卡尔乘积)

4.内连接

5.外连接

6.交叉连接

十二、子查询

1.介绍

2.分类

3.where或having后面

4.select后面

5.from后面

6.exists后面(相关子查询)

十三、分页查询

1.介绍(1-9为执行顺序)

2.特点

十四、联合查询

1.介绍

2.特点

十五、预祝元旦快乐



一、数据库的好处

? 持久化数据到本地
? 可以实现结构化查询,方便管理

二、数据库相关概念

? DB:数据库,保存一组有组织的数据的容器
? DMBS:数据库管理系统,又称为数据库软件,用于管理DB中的数据
? SQL:结构化查询语言,用于和DBMS通信的语言

三、数据库存储数据的特点

? 将数据放倒表中,表在放到库中。
? 一个数据库中可以有多个表,每个表都有一个名字用来标识自己。表名具有唯一性。
? 表具有一些特性。这些特性定义了数据在表中如何存储,类似java中类的设计。
? 表由列组成,我们称为字段。所有表都是由一个或多个列组成的,每一列类似java中的属性。
? 表中的数据是按行存储的,每一行类似于java中的对象。

四、MYSQL服务的启动和停止

方式一:计算机--右击管理--服务
方式二:通过管理员身份运行dos窗口
net start 服务名(启动服务)
net stop 服务名(停止服务)

五、MySQL常见命令

? 查看当前所有的数据库
show databases;
? 打开指定的库
use 库名;
? 查看当前库的所有表
show tables
? 查看其他库的所有表
show tables from 库名;
? 创建表
create table 表名(
列名 列类型,
列名 列类型,
.....
) ;
? 查看表结构
desc 表名;
? 查看服务器的版本
方式一:登录到mysql服务端
select version();
方式二:没有登录到mysql服务端
mysql --version

mysql --V

六、MysSQL的语法规范

? 不区分大小写,但建议关键字大写,表名、列名小写
? 每条命令最好用分号结尾
? 每条命令根据需要,可以缩进 或换行
? 注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/*注释文字*/

七、基础查询

1.介绍

语法:
SELECT 查询列表 FROM 表名;
类似于:System.out.println(打印东西);
特点:
? 查询列表可以是:表中的字段、常量值、表达式、函数
? 查询的结果是一个虚拟的表格

2.查询方式

? 查询表中的单个字段        SELECT last_name FROM employees;
? 查询表中的多个字段        SELECT last_name,salary,email FROM employees;
? 查询表中所有字段           SELECT 所有字段 FROM employees;2.SELECT * FROM employees;
? 查询常量值                      SELECT 100;SELECT 'John';
? 查询表达式                       SELCET 100%98;
? 查询函数                         SELECT VERSION();

3.补充

? 起别名

好处:
1.便于理解
2.如果要查询的字段有重名的情况,使用别名可以区分开来
例:
SELECT last_name AS 姓,first_name AS 名 FROM employees;(AS可省略)
注意:
别名中有特殊符号时(空格,#等),用双引号标识起来(mysql中建议双引号,单引号也行)
例:
SELECT salary AS "out put" FROM employees;

? +号的作用

java中的+号:
? 运算符,两个操作数都为数值型
? 连接符,只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能,运算符
例:
SELECT 100+90;      两个操作数都为数值型,做加法运算
SELECT '123'+90;    数字字符型将转换成数值型,而后做加法运算
SELECT 'john'+90;   非数字字符型将转换成数值型0,而后做加法运算
SELECT null+10;      只要其中一方为null,结果肯定为null

八、条件查询

1.介绍

语法:
SELECT
查询列表
FROM
表名
WHERE
筛选条件;

2.操作符分类

? 条件运算符: > < = != <> >= <=
? 逻辑运算符:&& || ! and or not
? 模糊查询:like     between and     in     is null    is not null

3.like 介绍

特点

一般和通配符搭配使用:
? % 任意多个字符,包含0个字符
? _  任意单个字符

案例

案例一:查询员工名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';
案例二:查询员工中第三个字符为e,第五个字符为a的员工名
SELECT last_name FROM employees WHERE last_name LIKE '__e_a';
案例三:查询员工名中第二个字符为_的员工名(转译,通配符等特殊符号充普通字符)
SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
LIKE '_\_%';

4.between and 介绍

特点

? 使用between and 可以提高语句的简洁度
? 包含临界值
? 两个临界值不要调换顺序(between 120 and 100 报错)

案例

案例一:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employees_id  >=120 AND employees_id<=100;
--------------------------------------------------------------------------------
SELECT
*
FROM
employees
WHERE
employees_id BETWEEN 100 AND 120;

5.in 介绍

含义:判断某字段的值是否属于in列表中的某一项
特点:1.使用in提高语句的简洁度
2.in列表的值类型必须统一

案例

案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个的员工名和工种编号
SELECT
last_name'
job_id
FROM
employees
WHERE
job_id='IT_PROG', OR job id ='AD_VP, OR job id ='AD_PRES';
--------------------------------------------------------------------------------------------
SELECT
last_name
job_id
FROM
employees
WHERE
job_id IN('IT_PORG','AD_VP','AD_PRES');

6.is (not) null 介绍

特点

? =  或  <>  不能用于判断null值
? is null  或  is not null   可判断null值

补充:安全等于  <=>

? IS NULL :只可以判断NULL值,可读性高,建议使用
? <=> :     既可以判断NULL值,又可以判断普通的数值,但可读性低

九、排序查询

1.介绍

语法:
SELECT      查询列表
FROM        表
WHERE      筛选条件
ORER BY    排序列表【asc,desc】
特点:
? asc表升序,可省略;desc表降序
? order by 子句中可以支持单个字段,多个字段(按第一个字段为主要关键字进行排序,后续字段为次要关键字进行排序)、表达式、函数、别名。
? order by 字句中一般是放在查询语句的最后面,limit子句除外。

十、分组查询

1.分组函数

功能:
用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum求和、avg平均值、max最大值、min最小值、count计算个数
特点:
? sum、avg一般用于处理数值型
max、min、count可以处理任何类型
? 以上分组函数都忽略null值
? 可以和distinct搭配实现去重的运算
? 一般使用count(*)用作统计行数
? 和分组函数一同查询的字段要求是group by后的字段

2.分组查询介绍

语法:
SELECT          分组函数,列(要求出现在group by的后面)
FROM              表
WHERE           筛选条件
GROUP BY      分组的列表
ORDER BY      子句
注意:
查询列表比较特殊,要求是分组函数和group by 后出现的字段
特点:
? 分组查询中的筛选条件分为两类
数据源                       位置                               关键字
分组前筛选           原始表                   group by子句的前面           where
分组后筛选         分组后的结果集        group by子句的后面           having
? group by子句支持单个字段分组,多个字段分组,(字段间用逗号隔开没有顺序要求),表达式或函数用的较少。
? 也可以添加排序(排序放在整个分组查询最后)
注意:
? 分组函数做条件肯定放在having子句中
? 能在分组前筛选的,就优先考虑分组前筛选

十一、连接查询

1.介绍

含义:
又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

2.分类

按年代分类:
sql92标准:仅仅支持内连接
sql99标准(推荐):支持内连接+外连接(左外和右外)+交叉连接
按功能分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
全外连接
交叉连接

3.笛卡尔积(笛卡尔乘积)

? 产生条件:
1.省略连接条件
2.连接条件无效
3.所有表中所有行互相连接
? 解决办法:
添加有效的筛选条件

4.内连接

* SQL92语法:
SELECT 查询列表
FROM 表名1 别名1 ,表名2 别名2
WHERE 连接条件
AND 筛选条件
GROUP BY 分组列表
HAVING 分组后筛选条件
ORDER BY 排序列表
* SQL99语法:
select 字段列表
from 表名1
[inner] join 表名2 on 条件
where 筛选条件
group by 分组条件
having 分组后的筛选条件
order by 排序字段
* 注意:
? 使用表名前缀在多个表中区分相同的列
? 在不同表中具有相同列名的列可以用表的别名加以区分
? 如果使用了表别名,则在select语句中需要使用表别名代替表名
? 表别名最多支持32个字符长度,但建议越少越好

5.外连接

? 左外连接(两表交集部分,和左表的非交集部分)
* 语法:
select 字段列表
from 表1
left [outer] join 表2 on 条件
...
* 注意:
左外连接查询的是左表所有数据以及其交集部分
-------------------------------------------------------------------------
? 右外连接(两表交集部分,和右表的非交集部分)
* 语法:
select 字段列表
from 表1
right [outer] join 表2 on 条件
...
* 注意:
右外连接查询的是右表所有数据以及其交集部分
----------------------------------------------------------------------------
? 全外连接(mysql不支持):两个表的全部(表a表b的交际部分,和非交集部分)

6.交叉连接

含义:使用99语法标准实现的笛卡尔乘积

十二、子查询

1.介绍

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

2.分类

? 按子查询出现的位置:
● select后面:
仅仅支持标量子查询
● from后面:
支持表子查询
● where或having后面:(常用)
标量子查询(单行子查询)(常用)
列子查询   (多行子查询)(常用)
行子查询
● exists后面(相关子查询)
表子查询
? 按结果集的行列数不同:
● 标量子查询(结果集只有一行一列)
● 列子查询(结果集只有一列多行)
● 行子查询(结果集有一行多列)
● 表子查询(结果集一般为多行多列)

3.where或having后面

where或having后面:
? 标量子查询(单行子查询)
? 列子查询(多行子查询)
? 行子查询(多列多行)
特点:
? 子查询放在小括号内
? 子查询一般放在条件的右侧
? 标量子查询,一般搭配单行操作符使用
>  <   >=  <=   =   <>
? 列子查询,一般搭配多行操作符使用
in、any/some、all
? 子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果

4.select后面

select后面:
仅仅支持标量子查询

5.from后面

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

6.exists后面(相关子查询)

语法:
exists(完整的查询语句)
结果:
1(存在)或0(不存在)

十三、分页查询

1.介绍(1-9为执行顺序)

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表              7
from   表                        1
【join type jion表2          2
on        连接条件            3
where   筛选条件           4
group by  分组字段        5
having     分组后筛选     6
order by  排序的字段】  8
limit offset,size;              9

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

2.特点

? limit语句放在查询语句的最后
? 公式:
要显示的页数page,每页的条目数size
select 查询列表
from 表
limit (page-1)*size,size;

十四、联合查询

1.介绍

union 联合 合并:将多条查询语句的结果合并成一个结果
语法:
查询语句1
union
查询语句2
union
.........
应用场景:
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时

2.特点

特点:
? 要求多条查询语句的查询列数时一致的
? 要求多个查询语句的查询的每一列的类型和顺序最好一致
? union关键字默认去重,如果使用union all 可以包含重复项




上一篇:MySQL的索引原理以及查询优化详解下一篇:SQL使用ROW_NUMBER() OVER函数生成序列号
程序园_程序员的世界 Copyright © 2020- www.580doc.com. Some Rights Reserved.