MySQL_基本概念&DQL查询语言
Posted yueseck
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL_基本概念&DQL查询语言相关的知识,希望对你有一定的参考价值。
目录
一、数据库的好处
♣ 持久化数据到本地
♣ 可以实现结构化查询,方便管理
二、数据库相关概念
♣ 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 可以包含重复项
十五、预祝元旦快乐
作为纯小白(非计算机专业)学java已经是4个多月了,很感谢自己的坚持。我从一窍不通到渐渐地觉得学习编程并不是那么难,甚至还自大的感觉自己有点入门了- - 学起来不那么吃力,但依然是枯燥的。现在主要是克服惰性。也希望大家也都能坚持住,一起加油!
元旦左右不一定会更新,最后预祝大家元旦快乐,心想事成!!
以上是关于MySQL_基本概念&DQL查询语言的主要内容,如果未能解决你的问题,请参考以下文章