MySQL基础 MySQL教程
命令行操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 mysql -V mysql --version net stop mysql84 net start mysql84 SOURCE demo.sql; mysql -h localhost -P 3308 -u root -p "mysql" -e "SHOW TABLES" ; quit; exit ;
SQL分类
DDL(Data Definition Languages数据定义语言):这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构
主要的语句关键字包括CREATE 、DROP 、ALTER 等
DML(Data Manipulation Language数据操作语言):用于添加、删除、更新和查询数据库记录,并检查数据完整性
主要的语句关键字包括INSERT 、DELETE 、UPDATE 、SELECT 等。SELECT是SQL语言的基础,最为重要
DCL(Data Control Language数据控制语言):用于定义数据库、表、字段、用户的访问权限和安全级别
主要的语句关键字包括GRANT 、REVOKE 、COMMIT 、ROLLBACK 、SAVEPOINT 等
注释
基础语法 执行顺序 FROM > JOIN | ON > WHERE > GROUP BY | HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
注意点
因WHERE在SELECT前运行,无法在WHERE中使用别名
标准SQL不允许您在GROUP BY子句中使用别名,但MySQL支持此功能
SELECT 在实例使用中不推荐使用SELECT *:
*返回您可能不使用的列中的数据。这会占用和浪费MySQL数据库服务器和应用程序之间产生不必要的I/O磁盘和网络流量
明确指定列,则结果集更易于预测且更易于管理。想象一下,当您使用*并且有人通过添加更多列来更改表时,您将得到与您预期的结果集不同的结果集
可能会将敏感信息暴露给未经授权的用户
可能会导致索引失效
DISTINCT DISTINCT对于NULL的处理:仅保留一个NULL值
1 2 WITH t(v) AS (SELECT NULL UNION ALL SELECT NULL UNION ALL SELECT 1 )SELECT DISTINCT v from t
GROUP BY也可以实现去重效果
1 2 3 4 SELECT DISTINCT col FROM t;SELECT col FROM t GROUP BY col;
DISTINCT和聚合函数
1 2 3 4 5 6 7 WITH T1 AS ( SELECT 1 AS `VALUE ` UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 2 ) SELECT COUNT (DISTINCT `VALUE `) FROM T1
ORDER BY
默认为ASC升序
1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT ordernumber, orderlinenumber, quantityOrdered * priceEach AS subtotal FROM orderdetails ORDER BY ordernumber, orderLineNumber, subtotal; ORDER BY ABS (value )
使用FIELD自定义排序
FIELD逻辑
1 2 3 4 5 6 7 SELECT FIELD("s","s","q","l"); SELECT FIELD("s","S","q","l"); SELECT FIELD("s","s","q","l","s"); SELECT FIELD('a' ,'s' ,'q' ,'l' )
1 2 3 4 5 6 7 8 9 10 SELECT orderNumber, status FROM orders ORDER BY FIELD(status, 'In Process' , 'On Hold' , 'Cancelled' , 'Resolved' , 'Disputed' ,'Shipped' );
排序字段简写为数字:按照SELECT出现字段的顺序对应
1 2 3 4 5 6 7 8 SELECT ordernumber, orderlinenumber FROM orderdetails ORDER BY 1 ASC , 2 DESC ;
LIMIT 1 2 3 4 5 6 LIMIT 2 LIMIT 2 OFFSET 0 LIMIT 0 ,2
运算符 NULL值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 SELECT TRUE AND NULL , FALSE AND NULL , TRUE OR NULL , NOT NULL ; SELECT 1 FROM DUAL WHERE 1 = NULL ; SELECT 10 + NULL , 0 * NULL , 8 / NULL ; SELECT NULL IS NULL ,NULL <=> NULL ; SELECT IFNULL(NULL ,1 ), COALESCE (NULL ,NULL ,1 ,NULL ), NULLIF (1 ,1 ), ISNULL(NULL );
算数运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT 10 DIV 2 , 10 / 2 , 10 + '1' , 10 + '1A2' , 10 + 'A2' , "A" + "B", 11 % 3 + 11 DIV 3 * 3 , 1 / 0
比较运算符 1 2 3 4 5 6 7 SELECT 1 = '1A2' ,0 = 'A1' FROM DUAL; SELECT "A" < "B"; SELECT LEAST('a' ,'b' ,'c' );
BETWEEN运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT 1 BETWEEN 1 AND 10 , 10 BETWEEN 1 AND 10 , 5 BETWEEN 10 AND 1 , NULL BETWEEN 1 AND 10 , "M" BETWEEN "A" AND "Z", "m" BETWEEN "A" AND "Z", "2023-06-20" BETWEEN CAST ("2023-06-01" AS DATE ) AND CONVERT ("2023-06-30",DATE )
CAST()函数将任何类型的值转换为具有指定类型的值。目标类型可以是以下类型之一:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED
LIKE / RLIKE运算符
1 2 3 4 5 6 SELECT "ABC" LIKE "%C", "ABC" LIKE "A_C"; SELECT "A__B" LIKE "A\_\_B","A__B" LIKE "A@_@_B" ESCAPE "@";
1 "^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$"
逻辑运算符
AND运算优先级高于OR
1 SELECT true OR false AND false ;