MySQL数据库-1
1.为什么要使用数据库
- 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以"固化”,而持久化的实现过程大多通过各种关系数据库来完成。
- 持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
2.数据库与数据库管理系统
2.1数据库的相关概念
- DB:数据库(Database)
即存储数据的“仓库”,其本质是一个文件系统。它保存了一系列有组织的数据。 - IDBMS:数据库管理系统(Database Management System)
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。 - sQL:结构化查询语言(Structured Query Language)专门用来与数据库通信的语言。
03章基本的SELECT语句
#1.sQL的分类
- DDL:数据定义语言。CREATE \ALTER \ DROP \ RENAME\TRUNCATE
- DML:数据操作语言。INSERT \DELETE
UPDATE \SELECT - DCL:数据控制语言。COMMIT \ROLLBACK \ SAVEPOINT \GRANT \REVOKE
2.2 SQL大小写规范(建议遵守)
- 推荐采用统一的书写规范:
- 数据库名、表名、表别名、字段名、字段别名等都小写。SQL关键字、函数名、绑定变量等都大写
最基本的SELECT...FROM结构
SELECT employee_id,last_name,salary
FROM employees
6.列的别名
as:全称:alias(别名),可以省略
列的别名可以使用一对""引起来。
SELECT employee_id 我id,last_name AS xxx,salary
FROM employees
7.去除重复行
DISTINCT
8.空值参与运算
空值: null
null不等同于0,'', 'nulll
着重号
SELECT*FROM order
;
查询常数
SELECT 'aaa',123, department_id
FROM employees;
#11.显示表结构
DESCRIBE employees; #显示了表中字段的详细信息
DESC employees;
#过滤条件 声明在FROM结构的后面
WHERE department_id = 90;
第04章_运算符
比较运算符
<=>:安全等于
SELECT NULL<=>NULL
LiKE:模制查询
%:代表不确定个数的字符(0个,1个,或多个)
_:代表一个不确定的字符
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%';
REGEXP\RLiKE :正则表达式
SELECT 'asdf' REGEXP 's.f','asdf' REGEXP '[nb]'
第5章_排序与分页
列的别名只能在 ORDER BY中使用,不能在wHERE中使用。
#第5章_排序与分页
#1.排序
SELECT * FROM employees;
#使用ORDERBY对查询到的数据进行排序操作。
#升序:Asc (ascend)
#降序:DESc (descend)
#如果在ORDER BY后没有显式指名排序的方式的话,则默认按照升序排列。
SELECT employee_id ,last_name,salary
FROM employees
ORDER BY salary DESC;
#2级排序
SELECT employee_id ,last_name,salary,department_id
FROM employees
ORDER BY department_id DESC,salary;
分页
#分页
#mysql使用limit实现数据的分页显示
SELECT employee_id ,last_name,salary,department_id
FROM employees
LIMIT 0,20;
#需求:每页显示pagesize条记录,此时显示第pageNo页:
#公式:LIMIT (pageNo-1)* pagesize,pagesizer
#2.2 WHERE ... ORDER BY ...LIMIT声明顺序如下:
#LIMIT的格式:严格来说:LIMIT位置偏移量,条目数
#结构"LIMIT 0,条目数"等价于"LIMIT条目数"
SELECT employee_id ,last_name,salary,department_id
FROM employees
WHERE salary>6000
ORDER BY salary DESC
LIMIT 0,20;
第06章_多表查询
#第06章_多表查询
SELECT employee_id,department_name
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`;
#如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表。
SELECT employee_id,department_name,employees.department_id
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`;
#建议:从sql优化的角度,建议多表查询时,每个字段前都指明其所在的表。
#可以给表起别名,在SELECT和wHERE中使用表的别名。
SELECT t1.employee_id,t2.department_name,t1.department_id
FROM employees t1,departments t2
WHERE t1.`department_id`=t2.`department_id`;
#如果给表起了别名,一旦在SELECT或WHERE中使用表名的话,则必须使用表的别名,而不能再使用表的原名。
#练习:查询员工的employee_id,last_name , department_name , city
#结论:如果有n个表实现多表的查询,则需要至少n-1个连接条件
SELECT t1.employee_id,t1.`last_name`,t2.department_name,t3.`city`,t1.department_id
FROM employees t1,departments t2,locations t3
WHERE t1.`department_id`=t2.`department_id`
AND t2.`location_id`=t3.`location_id`;
7.多表查询的分类
角度1:等值连接vs非等值连接
角度2:自连接vs非白连接
角度3:内连接vs外连接
#角度1:等值连接vs非等值连接
SELECT e.`last_name`,e.`salary`,j.`grade_level`
FROM employees e,job_grades j
WHERE e.`salary` BETWEEN j.`lowest_sal`AND j.`highest_sal`;
#自连接
#练习:查询员工id,员工姓名及其管理者的id和姓名
SELECT t1.`employee_id`,t1.`last_name`,t2.`employee_id`,t2.`last_name`
FROM employees t1,employees t2
WHERE t1.`manager_id`=t2.`employee_id`;
#7.3内连接vs外连接(交集和并集)
#内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
SELECT employee_id,department_name
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`;
#外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另1个表匹配的行之外,
#还查询到了左表或右表中不匹配的行。
#外连接的分类:左外连接、右外连接、满外连接
#.SQL92语法实现外连接:使用+ MySQL不支持sQL92语法中外连接的写法!
#sQL.99语法中使用JOIN ...ON的方式实现多表的查询。
#SQL99语法实现内连接:
SELECT employee_id,department_name
FROM employees JOIN departments
ON employees.`department_id`=departments.`department_id`;
#sQL99语法实现外连接:
#左外连接:
SELECT employee_id,department_name
FROM employees LEFT JOIN departments
ON employees.`department_id`=departments.`department_id`;
#满外连接: mysql不支持FULL OUTER JOIN
UNION操作符
UNION操作符返回两个查询的结果集的并集,去除重复记录。
UNION ALL操作符
UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
#满外连接: mysql不支持FULL OUTER JOIN
#!!!!!只能有一个分号
SELECT employee_id,department_name
FROM employees LEFT JOIN departments
ON employees.`department_id`=departments.`department_id`
UNION ALL
SELECT employee_id,department_name
FROM employees RIGHT JOIN departments
ON employees.`department_id`=departments.`department_id`
WHERE employees.`employee_id` IS NULL;
6.1自然连接
sQL99在SQL92的基础上提供了一些特殊语法,比如NATURAL JOIN用来表示自然连接。我们可以把自然连接理解为SQL92中的等值连接。它会帮你自动查询两张连接表中所有相同的字段,然后进行等值连接。
USING指定了具体的相同的字段名称,你需要在USING的括号()中填入要指定的同名字段。
函数
日期和时间函数
#日期和时间函数
SELECT NOW(),UNIX_TIMESTAMP(),FROM_UNIXTIME(UNIX_TIMESTAMP())
SELECT NOW(),DAY(NOW()),SECOND(NOW()),EXTRACT(HOUR FROM NOW())
SELECT NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR)
#3.7日期的格式化与解析
#格式化: 日期--->字符串
#解析: 字符串---->日期
SELECT NOW(),DATE_FORMAT(CURDATE(),'%Y--%c--%e') ,STR_TO_DATE('2023--11--11','%Y--%c--%e'),DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA'))
4.流程控制函数
#4.流程控制函数
SELECT last_name,salary,IF(salary>=10000,'高工资','低工资') '工资',IFNULL(commission_pct,0) pct,
CASE WHEN salary>=15000 THEN '111'
WHEN salary>=10000 THEN '222'
WHEN salary>=5000 THEN '333'
ELSE '000' END '资'
FROM employees
5.加密与解密的函数
#5.加密与解密的函数
SELECT MD5('sjhg'),SHA('sjhg')
标签:name,employees,id,employee,MySQL,department,数据库,SELECT
From: https://www.cnblogs.com/xin-zhi-suo-xiang/p/17887109.html