中国建设银行网站 个人客户,服装网站建设费用预算,合肥龙岗医院网站建设,邯郸最新消息基于尚硅谷的Mysql8.0视频#xff0c;修修改改。提取了一些精炼的内容。 首先需要在数据库内引入一张表。链接地址如下。
链接#xff1a;https://pan.baidu.com/s/1DD83on3J1a2INI7vrqPe4A 提取码#xff1a;68jy
会进行持续更新。。 1. Mysql目录结构
Mysql的目录结构…基于尚硅谷的Mysql8.0视频修修改改。提取了一些精炼的内容。 首先需要在数据库内引入一张表。链接地址如下。
链接https://pan.baidu.com/s/1DD83on3J1a2INI7vrqPe4A 提取码68jy
会进行持续更新。。 1. Mysql目录结构
Mysql的目录结构说明bin目录所有Mysql的可执行文件比如mysql.exe MySQLInstanceConfig.exe 数据库的配置向导在安装时出现的内容data目录系统数据库所在的目录my.ini文件MySQL的主要配置文件C:\ProgramData\MySQL\MySQL Server8.0\data\用户创建的数据库所在的目录 2. 基本的SELECT语句
2.1 SQL分类
Sql语言在功能上主要分为以下三大类
DDLData Definition Languages数据定义语言这些语句定义了不同的数据库表视图索引等数据库对象还可以用来创建删除修改数据库和数据表的结构。 主要的语句关键字包括 CREATE DROP ALTER等。DMLData Manipulation Languages数据库操作语言用于 增删改查。并检查数据库完整性。 主要的关键字包括InsertDeleteUpdateSelect等Select是Sql语言的基础最为重要。DCLData Control Languages数据库控制语言用于定义数据库表字段用户的访问权限和安全级别。 主要的语句关键字包括GrantREVOKECOMMITROLLBACKSAVEPOINT等。 因为查询语句使用的非常频繁所以很多人把查询语句拎出来单独作为DQL数据库查询语言 还有单独将COMMITROLLBACK取出来称为TCL事务控制语言 2.2 SQL语言的规范
2.2.1 基本规则
SQL可以写在一行或者多行。为了提高可读性各子句分行写必要时使用缩进每条命令以 或者 \g \G 结尾关键字不能被缩写也不能被分行关于标点符号 必须保证所有的()单引号双引号 是成双成对的必须使用英文状态下的半角输入方式字符串和日期类型的数据类型可以使用单引号表示 ( )列的别名尽量使用双引号( )而且不建议忽略 as 2.2.2 SQL大小写规范
Mysql在Window环境下是大小写不敏感的Mysql在Linux环境下是大小写敏感的数据库类名表名表的别名变量名是严格区分大小写的关键字函数名列名字段名列的别名字段的别名是忽略大小写的推荐采用统一的规范 数据库名表名表别名字段名字段别名等都小写SQL关键字函数名绑定变量等都大写 2.3 最基本的SELECT ... FROM结构
2.3.1 最基本的SELECT语句
SELECT 1; // 1SELECT 1 1; // 2
这种语句只有一个SELECT没有后面的语句结构也是一样可以进行查询出来的查询出来的内容就是结果。列名就是 SELECT后面跟的内容。其实他的表结构就类似于以下
SELECT 1 1 FROM DUAL;
DUAL: 伪表。
也就是说SELECT语句的最基本的构成是以下内容 SELECT * FROM table; SELECT 字段1, 字段2... FROM 表名 查询一张完整的表在上面提供过数据库查询库内的employees表。
-- 使用数据库
USE atguigudb;-- 查询所有的员工表下的信息SELECT * from employees;如果只想查询特定的列则可以把*改为想要查的列名
SELECT email FROM employees;
如果有多个列则可以使用 逗号隔开。
SELECT email, employee_id FROM employees; 2.3.2 列的别名的定义
重命名一个列便于计算紧跟列名也可以在列名和别名中间加上关键字AS别名使用双引号以便在别名中包含空格或者特殊的字符并且区分大小写。AS可以省略建议别名见名知意。
以下举例说明。
-- 原有的sql
SELECT email, employee_id FROM employees;-- 使用别名后的sql
SELECT email AS em, employee_id emp_id FROM employees;2.3.3 去除重复行 DISTINCT
查询所有的数据可能会出现重复的内容就可以使用取出重复行比如有以下一个需求。
我需要查询所有的department_id但是我不希望看见重复的。就可以使用这个关键字
DISTINCT
SELECT DISTINCT department_id FROM employees; 2.3.4 空值参与运算 IFNULL()
在MySQL查询中常常遇到某些元组的字段为NULL其参与的运算就全都为NULL。如何让字段为NULL的元组能按照我们指定的值参与运算呢本篇博客将教你IFNULL() 函数的使用。
给定一张员工表 employees 现在的需求是根据表中的 salary 和 commission_pct (即绩效奖金比例乘工资即为奖金) 计算每个员工的年总工资。
IFNULL 函数表示如果字段 commission_pct 不是 (NULL) 就按 commission_pct 本来的值计算而如果 commission_pct 为 (NULL) 就按 0 计算。如下代码所示
SELECT employee_id, last_name, salary, commission_pct, salary * (1 IFNULL(commission_pct, 0) * 12) AS annual salary
FROM employees;
有了 IFNULL 函数在 commission_pct 为 (NULL) 时就可以按照我们指定的值进行计算。
【结论】
只要在运算中带有 (NULL) 的元组在没有其他措施的干预下其运算结果必为 (NULL) 。 运用 IFNULL 函数在碰到字段为 (NULL) 的元组时能够按照我们指定的值参与运算。从而保证我们计算的结果不会出现 (NULL) 。 2.3.5 着重号
必须保证你的字段没有和保留字、数据库系统或常见方法冲突。如果坚持使用在SQL语句中使用 引起来。
SELECT * from order; 2.3.6 查询常数
用处我想查询员工表里的employee_id和last_name并且要带上公司名称。我就可以用查询常数来实现。
SELECT xxxx有限公司 AS 公司名, employee_id, last_name FROM employees; 2.4 显示表结构 DESC
DESCRIBE employees;
或
DESC employees;mysql desc employees;
--------------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------------
| employee_id | int(6) | NO | PRI | 0 | |
| first_name | varchar(20) | YES | | NULL | |
| last_name | varchar(25) | NO | | NULL | |
| email | varchar(25) | NO | UNI | NULL | |
| phone_number | varchar(20) | YES | | NULL | |
| hire_date | date | NO | | NULL | |
| job_id | varchar(10) | NO | MUL | NULL | |
| salary | double(8,2) | YES | | NULL | |
| commission_pct | double(2,2) | YES | | NULL | |
| manager_id | int(6) | YES | MUL | NULL | |
| department_id | int(4) | YES | MUL | NULL | |
--------------------------------------------------------
11 rows in set (0.00 sec)
其中各个字段的含义分别解释如下
Field表示字段名称。Type表示字段类型这里 barcode、goodsname 是文本型的price 是整数类型的。Null表示该列是否可以存储NULL值。Key表示该列是否已编制索引。PRI表示该列是表主键的一部分UNI表示该列是UNIQUE索引的一 部分MUL表示在列中某个给定值允许出现多次。Default表示该列是否有默认值如果有那么值是多少。Extra表示可以获取的与给定列有关的附加信息例如AUTO_INCREMENT等。 2.5 过滤数据 WHERE
以下格式来机械能过滤数据也就是筛选数据使用关键字WHERE
SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件;
使用WHERE 子句将不满足条件的行过滤掉。WHERE子句紧随 FROM子句。
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id 90; 3. 运算符
这一章节主要是运算用到了开始提到的一个概念伪表 DUAL
3.1 算数运算符
SELECT 10 0, 30 50 * 10, 100 - 99.5 FROM DUAL;
一个整数类型的值对整数进行加法和减法操作结果还是一个整数一个整数类型的值对浮点数进行加法和减法操作结果是一个浮点数在Java中 的左右两边如果有字符串那么表示字符串的拼接。但是在MySQL中 只表示数值相加。如果遇到非数值类型先尝试转成数值如果转失败就按0计算。注MySQL 中字符串拼接要使用字符串函数CONCAT()实现在数学运算中0不能用作除数在MySQL中一个数除以0为NULL。 3.2 比较运算符
3.2.1 等号运算符
比较运算符用来对表达式左边的操作数和右边的操作数进行比较比较的结果为真则返回1比较的结果 为假则返回0其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用返回符合条件的结果记录。
如果等号两边的值、字符串或表达式中有一个为NULL则比较结果为NULL。
SELECT 1 1, 1 1, 1 0, a a, (5 3) (2 6), NULL
, NULL NULL;-----------------------------------------------------------------------------
| 1 1 | 1 1 | 1 0 | a a | (5 3) (2 6) | NULL | NULL NULL |
-----------------------------------------------------------------------------
| 1 | 1 | 0 | 1 | 1 | NULL | NULL |
-----------------------------------------------------------------------------
1 row in set (0.00 sec)
如果等号两边的值、字符串或表达式都为字符串则MySQL会按照字符串进行比较其比较的 是每个字符串中字符的ANSI编码是否相等。如果等号两边的值都是整数则MySQL会按照整数来比较两个值的大小。如果等号两边的值一个是整数另一个是字符串则MySQL会将字符串转化为数字进行比较。如果等号两边的值、字符串或表达式中有一个为NULL则比较结果为NULL。 SELECT 1 1, 1 0, a a, (5 3) (2 6), NULL,NULL NULL FROM dual;----------------------------------------------------------------------------------
| 1 1 | 1 0 | a a | (5 3) (2 6) | NULL | NULL NULL |
----------------------------------------------------------------------------------
| 1 | 0 | 1 | 1 | 0 | 1 |
----------------------------------------------------------------------------------
1 row in set (0.00 sec) 可以看到使用安全等于运算符时两边的操作数的值都为NULL时返回的结果为1而不是NULL其他返回结果与等于运算符相同 在MySQL中字符串和数字类型的比较规则可能会引起一些问题。下面列举几个需要注意的事项 1如果字符串中包含非数字字符那么MySQL将无法将其转换成数字类型比较结果可能会出现异常。 2当一个字符串被转换成数字类型时如果其开头是0那么MySQL会将其视为八进制数进行转换。因此如果字符串中包含八进制数可能会导致比较结果出现异常。 3当进行字符串和数字类型的比较时MySQL会先将字符串类型的操作数转换成数字类型这可能会导致一些不必要的性能损失。 总结 当进行比较时需要注意字符串中是否存在非数字字符和八进制数以及字符串和数字类型的转换可能会导致性能损失。 3.2.2 不等于运算符
不等于运算符和!用于判断两边的数字、字符串或者表达式的值是否不相等 如果不相等则返回1相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL 或两边都为NULL则结果为NULL。 SQL语句示例如下
mysql SELECT 1 1, 1 ! 2, a ! b, (34) (26), a ! NULL, NULL NULL;-----------------------------------------------------------------------
| 1 1 | 1 ! 2 | a ! b | (34) (26) | a ! NULL | NULL NULL |
-----------------------------------------------------------------------
| 0 | 1 | 1 | 1 | NULL | NULL |
-----------------------------------------------------------------------
1 row in set (0.00 sec)
此外还有非符号类型的运算符 3.2.3 空运算符
空运算符 (IS NULL 或者 ISNULL) 判断一个值是否为NULL如果为NULL则返回1否则返回0。
SELECT NULL IS NULL, ISNULL(NULL), ISNULL(a), 1 IS NULL;----------------------------------------------------
| NULL IS NULL | ISNULL(NULL) | ISNULL(a) | 1 IS NULL |
----------------------------------------------------
| 1 | 1 | 0 | 0 |
----------------------------------------------------
1 row in set (0.00 sec) 3.2.4 非空运算符
非空运算符IS NOT NULL判断一个值是否不为NULL如果不为NULL则返回1否则返回0。 3.2.5 最小值运算符
语法格式为LEAST(值1值2...值n)。其中“值n”表示参数列表中有n个值。在有 两个或多个参数的情况下返回最小值。
SELECT LEAST (1,0,2), LEAST(b,a,c), LEAST(1,NULL,2)----------------------------------------------------
| LEAST (1,0,2) | LEAST(b,a,c) | LEAST(1,NULL,2) |
----------------------------------------------------
| 0 | a | NULL |
----------------------------------------------------
1 row in set (0.00 sec)
由结果可以看到当参数是整数或者浮点数时LEAST将返回其中最小的值当参数为字符串时返回字 母表中顺序最靠前的字符当比较值列表中有NULL时不能判断大小返回值为NULL。 3.2.6 最大值运算符
语法格式为GREATEST(值1值2...值n)。其中n表示参数列表中有n个值。当有 两个或多个参数时返回值为最大值。假如任意一个自变量为NULL则GREATEST()的返回值为NULL。
SELECT GREATEST(1,0,2), GREATEST(b,a,c), GREATEST(1,NULL,2);------------------------------------------------------------
| GREATEST(1,0,2) | GREATEST(b,a,c) | GREATEST(1,NULL,2) |
------------------------------------------------------------
| 2 | c | NULL |
------------------------------------------------------------
1 row in set (0.00 sec)
由结果可以看到当参数中是整数或者浮点数时GREATEST将返回其中最大的值当参数为字符串时 返回字母表中顺序最靠后的字符当比较值列表中有NULL时不能判断大小返回值为NULL。 3.2.7 BETWEEN AND运算符
BETWEEN运算符使用的格式通常为SELECT D FROM TABLE WHERE C BETWEEN A AND B此时当C大于或等于A并且C小于或等于B时结果为1否则结果为0。 3.2.8 IN运算符
IN运算符用于判断给定的值是否是IN列表中的一个值如果是则返回1否则返回0。如果给 定的值为NULL或者IN列表中存在NULL则结果为NULL。
SELECT a IN (a,b,c), 1 IN (2,3), NULL IN (a,b), a IN (a, NULL);-------------------------------------------------------------------------
| a IN (a,b,c) | 1 IN (2,3) | NULL IN (a,b) | a IN (a, NULL) |
-------------------------------------------------------------------------
| 1 | 0 | NULL | 1 |
------------------------------------------------------------------------- 3.2.9 NOT IN运算符
NOT IN运算符用于判断给定的值是否不是IN列表中的一个值如果不是IN列表中的一 个值则返回1否则返回0。 与IN运算符相反。 3.2.10 LIKE 运算符
LIKE运算符主要用来匹配字符串通常用于模糊匹配如果满足条件则返回1否则返回 0。如果给定的值或者匹配条件为NULL则返回结果为NULL。 “%”匹配0个或多个字符。
“_”只能匹配一个字符。 3.2.11 ESCAPE
回避特殊符号的使用转义符。例如将[%]转为[]然后再加上[ESCAPE‘$’]即可。
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT\_%‘;
如果使用\表示转义要省略ESCAPE。如果不是\则要加上ESCAPE。
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT$_%‘ escape ‘$‘; 3.2.12 REGEXP运算符
REGEXP运算符用来匹配字符串语法格式为 expr REGEXP 匹配条件 。
1‘^’匹配以该字符后面的字符开头的字符串。
2‘$’匹配以该字符前面的字符结尾的字符串。
3‘.’匹配任何一个单字符。
4“[...]”匹配在方括号内的任何字符。例如“[abc]”匹配“a”或“b”或“c”。为了命名字符的范围使用一 个‘-’。“[a-z]”匹配任何字母而“[0-9]”匹配任何数字。
5‘’匹配零个或多个在它前面的字符。例如“x”匹配任何数量的‘x’字符“[0-9]”匹配任何数量的数字 而“”匹配任何数量的任何字符。 3.3. 逻辑运算符
逻辑运算符主要用来判断表达式的真假在MySQL中逻辑运算符的返回结果为1、0或者NULL。
MySQL中支持4种逻辑运算符如下 3.4. 位运算
位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数然后进行位运算 最后将计算结果从二进制变回十进制数。
MySQL支持的位运算符如下 3.5 运算符的优先级
数字编号越大优先级越高优先级高的运算符先进行计算。 3.6 扩展 使用正则表达式查询 4. 排序与分页
4.1 排序规则
使用 ORDER BY 子句排序 ASCascend升序排序DESCdescend降序排序ORDER BY 的子句在 SELECT语句的结尾
4.1.1 单列排序
-- 如果查询employees表根据id进行升序或者降序排序应该如下-- 降序排序
SELECT * FROM employees ORDER BY employee_id DESC; -- 升序排序
SELECT * FROM employees ORDER BY employee_id ASC; 4.1.2 多列排序
可以使用不在SELECT列表中的列排序。在对多列进行排序的时候首先排序的第一列必须有相同的列值才会对第二列进行排序。如果第 一列数据中所有值都是唯一的将不再对第二列进行排序。
就是排序字段可以使用当前表的所有字段并不是只能使用select中所查找的字段 4.2 分页
格式
LIMIT [位置偏移量,] 行数
举例
--前10条记录
SELECT * FROM 表名 LIMIT 0,10;
或者
SELECT * FROM 表名 LIMIT 10;
--第11至20条记录
SELECT * FROM 表名 LIMIT 10,10;
--第21至30条记录
SELECT * FROM 表名 LIMIT 20,10;
LIMIT 后面跟的第一个数字是从哪个位置开始他有点类似于下标的概念。limit索引从0开始后面跟的数字是步长就是从前面哪个下标开始向后查询几条。如果是 105。则是从下标为10的位置开始算查询五条数出来。 MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”意思是获取从第5条记录开始后面的3条记录和“LIMIT 4,3;”返回的结果相同。 分页显式公式当前页数-1* 每页条数每页条数
SELECT * FROM table
LIMIT(PageNo - 1) * PageSize, PageSize; 注意LIMIT 子句必须放在整个SELECT语句的最后 使用LIMIT的好处
约束返回结果的数量可以 减少数据表的网络传输量 也可以 提升查询效率 。如果我们知道返回结果只有 1 条就可以使用 LIMIT 1 告诉 SELECT 语句只需要返回一条记录即可。这样的好处就是 SELECT 不需 要扫描完整的表只需要检索到一条符合条件的记录即可返回。 5.多表查询
5.1 多表查询分类
5.1.1 自链接
题目查询employees表返回 员工 works for 老板 文章转载自: http://www.morning.lrnfn.cn.gov.cn.lrnfn.cn http://www.morning.nwpnj.cn.gov.cn.nwpnj.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.xsszn.cn.gov.cn.xsszn.cn http://www.morning.btblm.cn.gov.cn.btblm.cn http://www.morning.ndmh.cn.gov.cn.ndmh.cn http://www.morning.xllrf.cn.gov.cn.xllrf.cn http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn http://www.morning.brwnd.cn.gov.cn.brwnd.cn http://www.morning.nldsd.cn.gov.cn.nldsd.cn http://www.morning.bkxnp.cn.gov.cn.bkxnp.cn http://www.morning.mcpby.cn.gov.cn.mcpby.cn http://www.morning.thxfn.cn.gov.cn.thxfn.cn http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.pkrb.cn.gov.cn.pkrb.cn http://www.morning.ntlxg.cn.gov.cn.ntlxg.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn http://www.morning.dgckn.cn.gov.cn.dgckn.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.nxcgp.cn.gov.cn.nxcgp.cn http://www.morning.mltsc.cn.gov.cn.mltsc.cn http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn http://www.morning.gcfg.cn.gov.cn.gcfg.cn http://www.morning.lwqst.cn.gov.cn.lwqst.cn http://www.morning.nyqxy.cn.gov.cn.nyqxy.cn http://www.morning.hptbp.cn.gov.cn.hptbp.cn http://www.morning.tkryt.cn.gov.cn.tkryt.cn http://www.morning.rkdw.cn.gov.cn.rkdw.cn http://www.morning.xkjrq.cn.gov.cn.xkjrq.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn http://www.morning.hmfxl.cn.gov.cn.hmfxl.cn http://www.morning.rntby.cn.gov.cn.rntby.cn http://www.morning.wrkcw.cn.gov.cn.wrkcw.cn http://www.morning.lthpr.cn.gov.cn.lthpr.cn http://www.morning.yesidu.com.gov.cn.yesidu.com http://www.morning.sfqtf.cn.gov.cn.sfqtf.cn http://www.morning.ymqrc.cn.gov.cn.ymqrc.cn http://www.morning.dqbpf.cn.gov.cn.dqbpf.cn http://www.morning.yqtry.cn.gov.cn.yqtry.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.gdgylp.com.gov.cn.gdgylp.com http://www.morning.mlnby.cn.gov.cn.mlnby.cn http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn http://www.morning.mlntx.cn.gov.cn.mlntx.cn http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn http://www.morning.pylpd.cn.gov.cn.pylpd.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.ryxyz.cn.gov.cn.ryxyz.cn http://www.morning.jjzxn.cn.gov.cn.jjzxn.cn http://www.morning.yldgw.cn.gov.cn.yldgw.cn http://www.morning.ktfbl.cn.gov.cn.ktfbl.cn http://www.morning.wgqtt.cn.gov.cn.wgqtt.cn http://www.morning.bndkf.cn.gov.cn.bndkf.cn http://www.morning.dydqh.cn.gov.cn.dydqh.cn http://www.morning.bmmhs.cn.gov.cn.bmmhs.cn http://www.morning.xsqbx.cn.gov.cn.xsqbx.cn http://www.morning.hrkth.cn.gov.cn.hrkth.cn http://www.morning.xtxp.cn.gov.cn.xtxp.cn http://www.morning.oioini.com.gov.cn.oioini.com http://www.morning.twmp.cn.gov.cn.twmp.cn http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn http://www.morning.hongjp.com.gov.cn.hongjp.com http://www.morning.pskjm.cn.gov.cn.pskjm.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.fqssx.cn.gov.cn.fqssx.cn http://www.morning.xrct.cn.gov.cn.xrct.cn http://www.morning.bnqcm.cn.gov.cn.bnqcm.cn http://www.morning.bzjpn.cn.gov.cn.bzjpn.cn http://www.morning.hfytgp.cn.gov.cn.hfytgp.cn http://www.morning.xllrf.cn.gov.cn.xllrf.cn http://www.morning.ptwzy.cn.gov.cn.ptwzy.cn http://www.morning.wmgjq.cn.gov.cn.wmgjq.cn http://www.morning.tkcz.cn.gov.cn.tkcz.cn