赞
踩
欢迎来到博客大学堂,软件工程申请出战
这篇文章基于文档级别进行编写,可以让你体会到不一般的SQL语句的魅力所在...
制作不易,觉得不错请点赞加收藏哟 !!!
目录
3.5 like子句(使用百分号 %字符来表示任意字符,如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的)
3.6 ORDER BY(排序) 语句(如果有多个排序条件,只有前面的排序之后还是相同,才会运用后面的排序机制)
-- IF EXISTS 是一个可选的子句,表示如果数据库存在才执行删除操作,避免因为表不存在而引发错误
- CREATE DATABASE [IF NOT EXISTS] database_name
- [CHARACTER SET charset_name]
- [COLLATE collation_name];
- DROP DATABASE <database_name>; -- 直接删除数据库,不检查是否存在
- DROP DATABASE [IF EXISTS] <database_name>; -- 检查是否存在,如果存在才删除
USE database_name;
- CREATE TABLE table_name (
- column1 数据类型 [约束] [默认],
- column2 数据类型 [约束] [默认],
- ...
- [表间的约束,eg:外键]
- [主键,eg:primary key(column1,column2)]
- )[引擎 eg:engine=innodb] [字符集 eg:character set utf8 or default charset=utf8] [校验规则 eg:collate utf8mb4_general_ci];
- DROP TABLE table_name ; -- 直接删除表,不检查是否存在
- DROP TABLE [IF EXISTS] table_name; -- 检查是否存在,如果存在才删除
ALTER TABLE <原表名> RENAME [TO] <新表名>
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
ALTER TABLE <表名> ADD <字段名> <数据类型>
ALTER TABLE <表名> DROP <字段名>
- ALTER TABLE <表名> ADD [CONSTRAINT <约束名>] FOREIGN KEY (<外键字段名>)references
- <对应主键所在表>(<对应主键字段名>)
-
- CREATE TABLE 表名(字段名 数据类型 [完整性约束条件],
-
- [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
-
- [索引名](字段名1 [(长度)] [ASC | DESC])
-
- );
-
-
UNIQUE:可选。表示索引为唯一性索引。
FULLTEXT;可选。表示索引为全文索引。
SPATIAL:可选。表示索引为空间索引。
长度:可选。指索引的长度,必须是字符串类型才可以使用。
- INSERT INTO table_name (column1, column2, column3, ...)
- VALUES (value1, value2, value3, ...);
-
- 插入多条数据
- INSERT INTO table_name (column1, column2, column3, ...)
- VALUES (value1, value2, value3, ...),(value1, value2, value3, ...),(value1, value2, value3, ...);
- SELECT [all|distinct] column1 [as '别名'], column2 [as '别名'], ...
- FROM table_name [as '别名']
- [WHERE condition]
- [ORDER BY column_name [ASC | DESC]]
- [LIMIT number];
参数说明:
column1, column2, ... 是你想要选择的列的名称,如果使用 * 表示选择所有列。
table_name 是你要从中查询数据的表的名称。
WHERE condition 是一个可选的子句,用于指定过滤条件,只返回符合条件的行。
ORDER BY column_name [ASC | DESC] 是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。
LIMIT number 是一个可选的子句,用于限制返回的行数。
- UPDATE table_name
- SET column1 = value1, column2 = value2, ...
- WHERE condition;
- DELETE FROM table_name
- WHERE condition;
- SELECT column1, column2, ...
- FROM table_name
- WHERE column_name LIKE pattern;
参数说明:
column_name 是你要应用 LIKE 子句的列的名称。
pattern 是用于匹配的模式,可以包含通配符。
- SELECT column1, column2, ...
- FROM table_name
- ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
- SELECT column1, aggregate_function(column2)
- FROM table_name
- WHERE condition
- GROUP BY column1
- HAVING condition;
参数说明:
column1:指定分组的列。
aggregate_function(column2):对分组后的每个组执行的聚合函数。
where condition:表示查询条件
having condition: 是对分组应用的筛选条件,这里的condition是对分组的筛选,比如可以这样筛选aggregate_function(column2) > 90
聚合函数:
COUNT():用于计算选定列的行数。
SUM():用于计算选定列的总和。
AVG():用于计算选定列的平均值。
MAX():用于选取选定列的最大值。
MIN():用于选取选定列的最小值。
注意事项:
count(*),*表示所有字段,也可以填字段名称
GROUP BY 子句通常与聚合函数一起使用,因为分组后需要对每个组进行聚合操作。
SELECT 子句中的列通常要么是分组列,要么是聚合函数的参数。
可以使用多个列进行分组,只需在 GROUP BY 子句中用逗号分隔列名即可
- SELECT column1, column2, aggregate_function(column3)
- FROM TABLE_NAME
- WHERE condition
- GROUP BY column1, column2;
在MySQL数据库中,查询语句的条件可以按照以下顺序进行组合和使用:
这些条件可以根据需要进行组合和调整,以满足具体的查询需求。
操作符包括以下几种:
+
,减法-
,乘法*
,除法/
等。=
,不等于<>
或!=
,大于>
,小于<
,大于等于>=
,小于等于<=
等。AND
,逻辑或OR
,逻辑非NOT
等。||
,字符串匹配的操作符LIKE
等。&
,按位或|
,按位取反~
等。=
,加等于+=
,减等于-=
等。IS NULL
,IS NOT NULL
。操作符的使用方式:
=
,用于检查两个值是否相等。<>
或 !=
,用于检查两个值是否不相等。>
,用于检查左边的值是否大于右边的值。<
,用于检查左边的值是否小于右边的值。>=
,用于检查左边的值是否大于或等于右边的值。<=
,用于检查左边的值是否小于或等于右边的值。BETWEEN value1 AND value2
。NOT BETWEEN value1 AND value2
。IN (value1, value2, ...)
。NOT IN (value1, value2, ...)
。%
(代表任意字符序列)和 _
(代表任意单个字符)。笛卡尔积是指在进行SQL查询时,如果没有指定任何条件或者连接条件,多张表之间会做笛卡尔积运算。笛卡尔积将两个表的所有行组合在一起,生成的结果是第一个表中每一行和第二个表中每一行的组合。这种情况下可能会导致结果集非常大,因此应该避免无意义的笛卡尔积操作。
要避免在数据库查询中使用不必要的笛卡尔积,可以使用连接操作(JOIN)指定表之间的关联条件,以便获取所需的结果集。
①.INNER JOIN(INNER JOIN 返回两个表中满足连接条件的匹配行,也就是它们的交集)
查到的是整合成的另外一张表
- SELECT [all|distinct] column1 [as '别名'], column2 [as '别名'], ...
- FROM table_name [as '别名'] inner join table_name2 on 连接条件
- [WHERE 查询条件表达式]
- SELECT *
- FROM table1
- INNER JOIN table2 ON table1.column_name = table2.column_name;
与上面结果一样,也可以这样实现
- SELECT [all|distinct] column1 [as '别名'], column2 [as '别名'], ...
- FROM table_name [as '别名'] , table_name2 [as '别名']
- WHERE 连接条件 [AND 查询条件表达式]
- SELECT *
- FROM table1,table2
- where table1.column_name = table2.column_name;
②.LEFT JOIN(左连接以左表为基础,根据on 后给出的条件将两表连接起来,最终的结果会将左表所有的信息列出,而右表只列出on条件与左表满足的部分,其余部分为NULL.)
- SELECT *
- FROM table1
- LEFT JOIN table2 ON table1.column_name = table2.column_name;
③.RIGHT JOIN(右连接以右表为基础,根据on 后给出的条件将两表连接起来,最终的结果会将右表所有的信息列出,而左表只列出on条件与右表满足的部分,其余部分为NULL.)
- SELECT *
- FROM table1
- RIGHT JOIN table2 ON table1.column_name = table2.column_name;
- -- 5、查询同时买了“sm01”和“sm02”商品的订单信息:订单号order_id、商品编号item_id、数量quantity和折扣discount。
- select A.order_id,A.item_id,A.quantity,A.discount,B.order_id,B.item_id,B.quantity,B.discount
- from order_details A inner join order_details B
- on A.order_id = B.order_id
- where A.item_id = 'sm01' and B.item_id = 'sm02';
写代码一般先写子查询,从内层到外层
相关子查询:
相关子查询是指内部查询依赖外部查询的结果进行计算。换句话说,内部查询中的条件是由外部查询中的结果传递给内部查询的。通常情况下,相关子查询会在外层查询的WHERE
子句或FROM
子句中使用。
例如,查找员工工资高于平均工资的员工可以使用相关子查询
- SELECT employee_name
- FROM employees
- WHERE salary > (
- SELECT AVG(salary)
- FROM employees
- );
不相关子查询:
不相关子查询是指内部查询与外部查询没有直接关联,内部查询的结果不依赖于外部查询的结果。不相关子查询通常在SELECT
子句或FROM
子句中独立存在。也就是涉及两张表
外键(Foreign Key)是关系数据库中的一个重要概念,用于建立表与表之间的关联关系。在关系数据库中,数据通常分布在多个表中,外键定义了一个表中的列(或多列)与另一个表中的列之间的关系。
外键的作用是确保数据的完整性和一致性.
1.创建外键
foreign key (字段) references 表名(字段)
- ALTER TABLE 表名
- ADD CONSTRAINT 外键约束名
- FOREIGN KEY (外键列名) REFERENCES 关联表名(关联列名);
2.删除外键
- ALTER TABLE 表名
- DROP FOREIGN KEY 外键约束名;
- ALTER TABLE 表名
- DROP CONSTRAINT 外键约束名;
- create database test02;
- use test02;
- create table class(
- class_id int primary key,
- name varchar(32)
- );
-
- create table student(
- id int not null,
- name varchar(32),
- foreign key (id) references class(class_id)
- );
-
- insert into class values(001,"ggs"),(002,"gzdx");
-
- -- 这里插入失败,原因是class_id是001和002,外键被约束只能是001和002这里面选
- insert into student VALUES(003,"lhx"),(004,"zgj");
- -- 插入成功
- insert into student VALUES(001,"lhx"),(002,"zgj");
注意:
alter table `参加` add constraint `FK_参加_职工` foreign key (`职工号`) references `职工`(`职工号`) on delete cascade;
1452 - Cannot add or update a child row:
错误代码 1452 和其描述表明,您尝试添加一个外键约束时出现了问题,因为在子表(
参加
表)中存在至少一个职工号
的值,在父表(职工
表)中没有对应的值。这违反了外键约束,因为外键要求子表中的每个值都必须在父表中有一个对应的存在的值。
- SELECT * FROM table
- ORDER BY id -- 这里可以是任何你想要排序的字段
- LIMIT start,rows;
表示从start + 1行开始取,取出rows行,start从0开始
- select * from table
- order by column
- limit 每页显示记录数 * (第几页 - 1),每页显示记录数
存储引擎(Storage Engine)是负责管理表的存储和检索的组件,它们之间有不同的特性、优缺点
以及适用场景
1.InnoDB:
事务支持:InnoDB 支持事务,这意味着它提供了 ACID(原子性、一致性、隔离性、持久性)特性。
行级锁定:InnoDB 使用行级锁定来管理并发访问,这使得它在高并发环境中表现良好。
外键支持:InnoDB 支持外键约束,可以确保数据的完整性。
崩溃恢复:InnoDB 提供了崩溃恢复功能,可以在数据库异常关闭后进行自动恢复。
CPU 和内存消耗较高:相对于 MyISAM,InnoDB 的 CPU 和内存消耗较高,但提供了更好的数据完整性和事务支持。
默认存储引擎:MySQL 5.5.5 版本之后,InnoDB 成为 MySQL 的默认存储引擎。
2.MyISAM:
不支持事务:MyISAM 不支持事务,因此不提供事务的 ACID 特性。
表级锁定:MyISAM 使用表级锁定,这在高并发环境下可能导致性能瓶颈。
全文索引:MyISAM 提供了全文索引的支持,这使得它在某些特定场景下效率较高。
较快的读取速度:在读取密集型的应用场景下,MyISAM 可能比 InnoDB 更快。
不支持外键约束:MyISAM 不支持外键约束,因此需要在应用层面进行数据完整性的控制。
容易损坏:MyISAM 表容易因为崩溃或断电而损坏,需要手动修复。
3.MEMORY:
存储在内存中:MEMORY 存储引擎将数据存储在内存中,因此读写速度非常快。
不支持事务:与 MyISAM 类似,MEMORY 也不支持事务。
表级锁定:类似于 MyISAM,MEMORY 使用表级锁定。
临时表:MEMORY 表通常用于存储临时数据,例如临时结果集或缓存数据。
数据易丢失:由于数据存储在内存中,因此在服务器重新启动或崩溃时,数据会丢失。
如果应用程序需要事务支持和数据完整性,则应选择 InnoDB。如果应用程序对读取性能更为重要且不需要事务支持,则可以考虑使用 MyISAM。
而对于临时性数据或缓存数据,MEMORY 可能是一个不错的选择
MySQL中内置了很多字符串函数,常用的几个如下:
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
①.查询用户
select * from mysql.user;
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
DROP USER '用户名'@'主机名' ;
MySQL中定义了很多种权限,但是常用的就以下几种:
①.查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;
②.授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
③.撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。