数据库、MySQL简介以及SQL语言之DQL

目录

前言

一、数据库简介

二、MySQL简介

三、SQL语言之DQL

1. SQL简介及分类

2. DQL语言

2.1 基础查询

2.2 条件查询

2.3 排序查询

2.4 分组查询

2.5 连接查询

2.6 子查询

2.7 分页查询

2.8 联合查询


前言

        各位小伙伴们,好久不见!经过JavaSE基础的学习,我现在终于来到了数据库阶段。ヾ(@^▽^@)ノ 今天我就向大家简单介绍下数据库以及SQL语言中的数据库查询语言(DQL)。再接下来数据库的学习旅程中博主使用的数据库管理系统都是MySQL,毕竟MySQL免费且比较流行。


一、数据库简介

        数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

1. 数据库的好处

  1. 可以持久化数据到本地
  2. 结构化查询

2. 数据库的常见概念(★)

  • DB:数据库,存储数据的容器
  • DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
  • SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言

3. 数据库存储数据的特点

  1. 数据存放到表中,然后表再放到库中
  2. 一个库中可以有多张表,每张表具有唯一的表名用来标识自己
  3. 表中有一个或多个列,列又称为“字段”,相当于java中“属性”
  4. 表中的每一行数据,相当于java中“对象”

        常见的数据库管理系统(DBMS):mysql、oracle、db2、sqlserver。初学数据库的话推荐大家学习MySQL,因为MySQL开源免费且很多公司都在使用MySQL,流行度较高。接下来我就给大家简单介绍下MySQL。


二、MySQL简介

        MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

1. MySQL的特点

  • MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

2. MySQL的优点

  • 开源、免费、成本低
  • 性能高、移植性也好
  • 体积小,便于安装

三、SQL语言之DQL

1. SQL简介及分类

        SQL 是用于访问和处理数据库的标准的计算机语言。

① 什么是SQL?

  • SQL 指结构化查询语言
  • SQL 使我们有能力访问数据库
  • SQL 是一种 ANSI (美国国家标准化组织)的标准计算机语言

② SQL 能做什么?

  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的记录
  • SQL 可更新数据库中的数据
  • SQL 可从数据库删除记录
  • SQL 可创建新数据库
  • SQL 可在数据库中创建新表
  • SQL 可在数据库中创建存储过程
  • SQL 可在数据库中创建视图
  • SQL 可以设置表、存储过程和视图的权限

③ SQL 的语言分类

  • DQL(Data Query Language):数据查询语言 select
  • DML(Data Manipulate Language):数据操作语言 insert 、update、delete
  • DDL(Data Define Languge):数据定义语言 create、drop、alter
  • TCL(Transaction Control Language):事务控制语言 commit、rollback

2. DQL语言

        DQL是数据查询语言,属于SQL中的一类,大家从字面意思可以看出这是专门做数据查询的,它最主要的关键字是select。DQL又分为很多种查询类型,接下来我将依次介绍所有查询类型。

2.1 基础查询

(1)语法

select 查询列表 from 表名;

(2)特点

  • 查询列表可以是字段、常量、表达式、函数,也可以是多个
  • 查询结果是一个虚拟表

(3)示例

    ① 查询单个字段

select 字段名 from 表名;

    ② 查询多个字段

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

    ③ 查询所有字段

select * from 表名

    ④ 查询常量

select 常量值;

    注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要

    ⑤ 查询函数

select 函数名(实参列表);

    ⑥ 查询表达式

select 100/1234;

    ⑦ 起别名

  • as:select 字段名 as 别名 from 表名;
  • 空格:select 字段名 别名 from 表名;

    ⑧ 去重

​​​​​​​select distinct 字段名 from 表名;

    ⑨ +(MySQL中的加号)

作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null

    ⑩【补充】concat函数

        功能:拼接字符
        select concat(字符1,字符2,字符3,...);

    ⑪【补充】ifnull函数

        功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
        select ifnull(commission_pct,0) from employees;

    ⑫【补充】isnull函数

        功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0

2.2 条件查询

(1)语法

select 查询列表
from 表名
where 筛选条件

(2)筛选条件的分类

    ① 简单条件运算符

        > < = <> != >= <=  <=>安全等于

    ② 逻辑运算符

        && and
        || or
        !  not

    ③ 模糊查询

        like:一般搭配通配符使用,可以判断字符型或数值型
        通配符:%任意多个字符,_任意单个字符

        between and
        in
        is null /is not null:用于判断null值

    is null与<=>的对比:

(3)示例

    ① 案例1:查询工资>12000的员工信息

SELECT 
	*
FROM
	employees
WHERE
	salary>12000;

    ② 案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息

SELECT
	*
FROM
	employees
WHERE
	NOT(department_id>=90 AND  department_id<=110) OR salary>15000;

    ③ 案例3:查询员工名中包含字符a的员工信息

select 
	*
from
	employees
where
	last_name like '%a%';

2.3 排序查询

(1)语法

select 查询列表
from 表
where 筛选条件
order by 排序列表 【asc|desc】

(2)特点

    ① asc :升序,如果不写默认升序
        desc:降序

    ② 排序列表 支持 单个字段、多个字段、函数、表达式、别名

    ③ order by的位置一般放在查询语句的最后(除limit语句之外)

(3)示例

    ① 案例1:查询员工信息,按年薪升序

SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;

    ② 案例2:查询部门编号>=90的员工信息,并按员工编号降序

SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;

2.4 分组查询

(1)语法

select 分组函数,分组后的字段
from 表
【where 筛选条件】
group by 分组的字段
【having 分组后的筛选】
【order by 排序列表】

(2)特点

(3)示例

    ① 案例1:查询每个工种的员工平均工资

SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

    ② 案例2:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

SELECT job_id,MAX(salary)
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;

    ③ 案例3:查询每个工种每个部门的最低工资,并按最低工资降序

SELECT MIN(salary),job_id,department_id
FROM employees
GROUP BY department_id,job_id
ORDER BY MIN(salary) DESC;

2.5 连接查询

(1)含义

    当查询中涉及到了多个表的字段,需要使用多表连接
    select 字段1,字段2
    from 表1,表2,...;

    笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接
    如何解决:添加有效的连接条件

(2)分类

按年代分类:
    sql92:
        等值
        非等值
        自连接

        也支持一部分外连接(用于oracle、sqlserver,mysql不支持)
    sql99【推荐使用】
        内连接
            等值
            非等值
            自连接
        外连接
            左外
            右外
            全外(mysql不支持)
        交叉连接

(3)SQL92语法
    ① 等值连接
    语法:

select 查询列表
from 表1 别名,表2 别名
where 表1.key=表2.key

【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

    特点:
        1. 一般为表起别名
        2. 多表的顺序可以调换
        3. n表连接至少需要n-1个连接条件
        4. 等值连接的结果是多表的交集部分

    ② 非等值连接
    语法:

select 查询列表
from 表1 别名,表2 别名
where 非等值的连接条件

【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

    ③ 自连接

    语法:

select 查询列表
from 表 别名1,表 别名2
where 等值的连接条件

【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

(4)SQL99语法

    ① 内连接
    语法:

select 查询列表
from 表1 别名
【inner】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;

    特点:

  1. 表的顺序可以调换
  2. 内连接的结果=多表的交集
  3. n表连接至少需要n-1个连接条件

    分类:

  • 等值连接
  • 非等值连接
  • 自连接

    ② 外连接

    语法:

select 查询列表
from 表1 别名
left|right|full【outer】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;

    特点:

  1. 查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
  2. left join 左边的就是主表,right join 右边的就是主表,full join 两边都是主表
  3. 一般用于查询除了交集部分的剩余的不匹配的行

    ③ 交叉连接

    语法:

select 查询列表
from 表1 别名
cross join 表2 别名;

    特点:类似于笛卡尔乘积

(5)示例

    ① 案例1:查询部门的员工个数>3的部门名和员工个数,并按个数降序

SELECT COUNT(*) 个数,department_name
FROM employees e
INNER JOIN departments d
ON e.`department_id`=d.`department_id`
GROUP BY department_name
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC;

    ② 案例2:查询员工的工资级别

SELECT salary,grade_level
FROM employees e
JOIN job_grades g
ON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`;

    ③ 案例3:查询员工的名字以及其上级的名字

SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m
ON e.`manager_id`= m.`employee_id`;

    ④ 案例4:查询哪个部门没有员工

SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` IS NULL;

2.6 子查询

(1)含义

嵌套在其他语句内部的select语句称为子查询或内查询

外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多

外面如果为select语句,则此语句称为外查询或主查询

(2)分类
    ① 按出现位置
        select后面:仅仅支持标量子查询

        from后面:表子查询

        where或having后面:标量子查询、列子查询、行子查询

        exists后面:标量子查询、列子查询、行子查询、表子查询

    ② 按结果集的行列

        标量子查询(单行子查询):结果集为一行一列

        列子查询(多行子查询):结果集为多行一列

        行子查询:结果集为多行多列

        表子查询:结果集为多行多列

(3)示例

    ① 案例1:查询最低工资的员工姓名和工资

select last_name,salary
from employees
where salary=(
	select min(salary) from employees
);

    ② 案例2:查询所有是领导的员工姓名

select last_name
from employees
where employee_id in(
	select manager_id
	from employees
);

    ③ 案例3:查询每个部门的平均工资的工资等级

SELECT  ag_dep.*,g.`grade_level`
FROM (
	SELECT AVG(salary) ag,department_id
	FROM employees
	GROUP BY department_id
) ag_dep
INNER JOIN job_grades g
ON ag_dep.ag BETWEEN lowest_sal AND highest_sal;

2.7 分页查询

(1)应用场景

        当要查询的条目数太多,一页显示不全

(2)语法

select 查询列表
from 表
limit 【offset,】size;

    注意:
    offset代表的是起始的条目索引,默认从0开始
    size代表的是显示的条目数

    公式:
    假如要显示的页数为page,每一页条目数为size
    select 查询列表
    from 表
    limit (page-1)*size,size;

(3)示例

    ① 案例1:查询前五条员工信息

SELECT * FROM  employees LIMIT 0,5;

    ② 案例2:查询有奖金的员工信息,并且工资较高的前10名显示出来

SELECT 
    * 
FROM
    employees 
WHERE commission_pct IS NOT NULL 
ORDER BY salary DESC 
LIMIT 10 ;

2.8 联合查询

(1)含义

        union:合并、联合,将多次查询结果合并成一个结果

(2)语法

查询语句1
union 【all】
查询语句2
union 【all】
...

(3)意义

  1. 将一条比较复杂的查询语句拆分成多条语句
  2. 适用于查询多个表的时候,查询的列基本是一致

(4)特点

  1. 要求多条查询语句的查询列数必须一致
  2. 要求多条查询语句的查询的各列类型、顺序最好一致
  3. union 去重,union all包含重复项

        到此数据库、MySQL简介以及SQL语言中的DQL就介绍完了,我们下期不见不散,拜拜!下期预告:SQL语言之DML & DDL

博主创作不易,小伙伴们快动动你们的小手指,给博主点个赞支持一下吧!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>