一、SQL简述
1.SQL的概述
SQL(Structured Query Language)是结构化查询语言的缩写,用于管理和操作关系型数据库。它是一种标准化的语言,通过使用语句描述数据库中数据的定义、操作和控制。
SQL可以用于执行各种数据库操作,如创建数据库和表、插入、更新和删除数据、查询数据、定义约束等。它是与数据库进行通信的主要工具,也是开发和管理数据库的核心技术之一。
2.SQL的优点
SQL具有以下几个优点:
- 简单易学:SQL的语法相对简单,易于学习和理解。
- 高度可用:SQL可以用于各种数据库管理系统,如MySQL、Oracle、SQL Server等。
- 统一性:SQL是一种标准化的语言,不受特定数据库类型的限制。
- 丰富的功能:SQL支持各种数据库操作,包括数据的增删改查、定义约束、事务处理等。
- 数据独立性:通过使用SQL,应用程序与数据库之间可以实现数据的独立性,不受具体数据库实现的影响。
3.SQL的分类
SQL可以根据功能的不同划分为以下几个方面:
- 数据定义语言(DDL):用于定义和管理数据库对象,如创建数据库、创建表、修改表结构等。
- 数据操纵语言(DML):用于对数据库中的数据进行操作,如插入、更新、删除和查询数据等。
- 数据控制语言(DCL):用于控制和管理数据库的访问权限,如设置用户的权限和角色等。
- 数据查询语言(DQL):用于从数据库中查询数据,如SELECT语句。
- 事务控制语言(TCL):用于控制和管理数据库中的事务,如提交和回滚事务。
不同类型的SQL语句可以组合使用,以完成复杂的数据库操作和管理。
二、数据库的三大范式
数据库的三大范式是指在数据库设计过程中,为了保证数据库的数据关联性和一致性,遵循的一些规范和原则。它们是:
- 第一范式(1NF):确保每一列的原子性,即每个字段都不可再分。每个字段中的数据需要是不可再分的,不能包含多个值或多个属性。
- 第二范式(2NF):在1NF的基础上,确保非主键字段完全依赖于主键字段。即非主键字段必须完全依赖主键字段,而不能只依赖主键的一部分。
- 第三范式(3NF):在2NF的基础上,确保非主键字段之间没有传递依赖关系。即非主键字段之间不能相互依赖,而是直接依赖于主键字段。
遵循三大范式可以有效地提高数据的规范性和一致性,减少数据冗余和数据异常的出现。
三、数据库的数据类型
数据库中的数据类型决定了数据的存储格式和操作方式。常见的数据库数据类型包括整数类型、浮点数类型、字符串类型、日期与时间类型、二进制类型等。
1. 整数类型
整数类型用于存储整数数据,常见的整数类型有:
- TINYINT:1个字节,范围为-128到127或0到255。
- SMALLINT:2个字节,范围为-32768到32767或0到65535。
- INT:4个字节,范围为-2147483648到2147483647或0到4294967295。
- BIGINT:8个字节,范围为-9223372036854775808到9223372036854775807或0到18446744073709551615。
2. 浮点数类型和定点数类型
浮点数类型用于存储小数数据,包括单精度浮点数(FLOAT)和双精度浮点数(DOUBLE)。定点数类型用于存储精度固定的小数数据,包括DECIMAL。
- FLOAT:4个字节,可精确到7位小数。
- DOUBLE:8个字节,可精确到15位小数。
- DECIMAL:可指定精度和小数位数的定点数类型。
3. 字符串类型
字符串类型用于存储字符数据,常见的字符串类型有:
- CHAR:固定长度字符串,最多可存储255个字符。
- VARCHAR:可变长度字符串,最多可存储65535个字符。
- TEXT:可变长度字符串,最多可存储约65,535个字符。
4. 日期与时间类型
日期与时间类型用于存储日期和时间数据,常见的日期与时间类型有:
- DATE:存储日期,格式为YYYY-MM-DD。
- TIME:存储时间,格式为HH:MI:SS。
- DATETIME:存储日期和时间,格式为YYYY-MM-DD HH:MI:SS。
- TIMESTAMP:存储日期和时间的时间戳,格式为YYYY-MM-DD HH:MI:SS。
6. 二进制类型
二进制类型用于存储二进制数据,常见的二进制类型有:
- BLOB:二进制大对象,可存储大量的二进制数据。
- BIT:存储位值,可以是0或1。
数据库的数据类型根据具体的需求和业务逻辑选择合适的类型,以保证数据的准确性和有效性。
四、数据库、数据表的基本操作
1. 数据库的基本操作
数据库的基本操作包括创建数据库、切换数据库、删除数据库等。
- 创建数据库:CREATE DATABASE database_name;
- 切换数据库:USE database_name;
- 删除数据库:DROP DATABASE database_name;
2. 数据表的基本操作
数据表的基本操作包括创建数据表、查看数据表、修改数据表和删除数据表等。
2.1 创建数据表
使用CREATE TABLE语句来创建数据表,并指定每个字段的名称、数据类型和约束等。
代码语言:sql复制CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
...
);
2.2 查看数据表
使用DESCRIBE或SHOW命令来查看数据表的结构和字段信息。
代码语言:sql复制DESCRIBE table_name;
SHOW COLUMNS FROM table_name;
2.3 修改数据表
使用ALTER TABLE语句来修改数据表的结构,如添加字段、修改字段类型、删除字段等。
代码语言:sql复制ALTER TABLE table_name ADD column_name datatype constraint;
ALTER TABLE table_name MODIFY column_name new_datatype constraint;
ALTER TABLE table_name DROP column_name;
2.4 删除数据表
使用DROP TABLE语句来删除数据表。
代码语言:sql复制DROP TABLE table_name;
五、数据表的约束
数据库表的约束用于限制数据的输入规则,保证数据的一致性和完整性。常见的数据表约束包括主键约束、非空约束、默认值约束、唯一性约束和外键约束等。
1. 主键约束
主键约束用于唯一标识数据表中的每一行数据,保证数据的唯一性和完整性。
代码语言:sql复制CREATE TABLE table_name (
column1 datatype PRIMARY KEY,
column2 datatype,
...
);
2. 非空约束
非空约束用于确保某个字段的值不能为空。
代码语言:sql复制CREATE TABLE table_name (
column1 datatype NOT NULL,
column2 datatype,
...
);
3. 默认值约束
默认值约束用于设置某个字段的默认值。
代码语言:sql复制CREATE TABLE table_name (
column1 datatype DEFAULT default_value,
column2 datatype,
...
);
5. 唯一性约束
唯一性约束用于确保某个字段的值在整个数据表中是唯一的。
代码语言:sql复制CREATE TABLE table_name (
column1 datatype UNIQUE,
column2 datatype,
...
);
6. 外键约束
外键约束用于保持数据表之间的一致性和约束关系,确保数据的完整性。
6.1 数据一致性概念
在设置外键约束之前,需要了解数据一致性的概念。数据一致性是指当表与表之间存在关联关系时,所有相关的数据必须保持一致,不会出现孤儿数据或者脏数据。通过使用外键约束,可以确保数据表之间的关联关系的一致性。
6.2 删除外键
使用ALTER TABLE语句来删除外键约束。
代码语言:sql复制ALTER TABLE table_name DROP FOREIGN KEY constraint_name;
6.3 关于外键约束需要注意的细节
- 外键约束必须指向已经存在的主键或唯一键。
- 通过外键约束,可以实现数据表之间的一对一、一对多或多对多的关系。
- 外键约束会导致数据库的性能下降,因此在设计数据库时需要权衡性能和数据一致性的要求。
六、数据表插入数据
向数据表中插入数据可以使用INSERT INTO语句。
1. 为表中所有字段插入数据
使用INSERT INTO语句为表中的所有字段插入数据。
代码语言:sql复制INSERT INTO table_name VALUES (value1, value2, ...);
2. 为表中指定字段插入数据
使用INSERT INTO语句为表中的指定字段插入数据。
代码语言:sql复制INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
3. 同时插入多条记录
使用INSERT INTO语句一次性插入多条记录。
代码语言:sql复制INSERT INTO table_name (column1, column2, ...) VALUES
(value1, value2, ...),
(value1, value2, ...),
...
七、更新数据
使用UPDATE语句来更新数据表中的数据。
1. UPDATE基本语法
使用UPDATE语句来更新表中的数据。
代码语言:sql复制UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
2. UPDATE更新部分数据
使用UPDATE语句来更新部分数据。
代码语言:sql复制UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
3. UPDATE更新全部数据
使用UPDATE语句来更新全部数据。
代码语言:sql复制UPDATE table_name SET column1 = value1, column2 = value2, ...;
八、删除数据
使用DELETE语句来删除数据表中的数据。
1. DELETE基本语法
使用DELETE语句来删除数据。
代码语言:sql复制DELETE FROM table_name WHERE condition;
2. DELETE删除部分数据
使用DELETE语句来删除部分数据。
代码语言:sql复制DELETE FROM table_name WHERE condition;
3. DELETE删除全部数据
使用DELETE语句来删除全部数据。
代码语言:sql复制DELETE FROM table_name;
4. TRUNCATE和DELETE的区别
TRUNCATE TABLE语句用于删除数据表中的全部数据,但保留表结构。DELETE语句用于删除数据表中的部分或全部数据。
TRUNCATE TABLE语句效率比DELETE语句高,但无法回滚操作,需要谨慎使用。
九、MySQL数据表简单查询
1. 简单查询概述
简单查询是最基本的查询方式,用于从数据表中检索特定的数据。使用SELECT语句进行查询。
2. 查询所有字段(方法不唯一只是举例)
查询所有字段使用SELECT *语句。
代码语言:sql复制SELECT * FROM table_name;
3. 查询指定字段(sid、sname)
查询指定字段使用SELECT字段名语句。
代码语言:sql复制SELECT sid, sname FROM table_name;
4. 常数的查询
查询常数使用SELECT常数语句。
代码语言:sql复制SELECT 1, 'Hello, World!';
5. 从查询结果中过滤重复数据
使用DISTINCT关键字从查询结果中过滤重复数据。
代码语言:sql复制SELECT DISTINCT column_name FROM table_name;
6. 算术运算符(举例加运算符)
使用算术运算符进行计算。
代码语言:sql复制SELECT column1 column2 AS result FROM table_name;
十、函数
1. 聚合函数
聚合函数用于对数据进行统计和计算,包括count()、max()、min()、sum()和avg()等。
1.1、count()
统计满足条件的行数。
代码语言:sql复制SELECT COUNT(column_name) FROM table_name WHERE condition;
1.2、max()
计算指定列的最大值。
代码语言:sql复制SELECT MAX(column_name) FROM table_name WHERE condition;
1.3、min()
计算指定列的最小值。
代码语言:sql复制SELECT MIN(column_name) FROM table_name WHERE condition;
1.4、sum()
计算指定列的总和。
代码语言:sql复制SELECT SUM(column_name) FROM table_name WHERE condition;
1.5、avg()
计算指定列的平均值。
代码语言:sql复制SELECT AVG(column_name) FROM table_name WHERE condition;
2. 其他常用函数
除了聚合函数外,还有其他常用的函数,如时间函数、字符串函数和数学函数等。
2.1、时间函数
常用的时间函数包括NOW()、DATE()和MONTH()等。
代码语言:sql复制SELECT NOW(); -- 返回当前日期和时间
SELECT DATE(column_name); -- 返回列的日期部分
SELECT MONTH(column_name); -- 返回列的月份部分
2.2、字符串函数
常用的字符串函数包括CONCAT()、LENGTH()和SUBSTRING()等。
代码语言:sql复制SELECT CONCAT(column1, column2) AS result FROM table_name; -- 连接两个字符串
SELECT LENGTH(column_name) FROM table_name; -- 返回字符串的长度
SELECT SUBSTRING(column_name, start, length) FROM table_name; -- 返回字符串的子串
2.3、数学函数
常用的数学函数包括ABS()、ROUND()和FLOOR()等。
代码语言:sql复制SELECT ABS(column_name) FROM table_name; -- 返回绝对值
SELECT ROUND(column_name) FROM table_name; -- 返回四舍五入值
SELECT FLOOR(column_name) FROM table_name; -- 返回向下取整值
十一、条件查询
条件查询用于根据条件从数据表中检索数据。
1. 使用关系运算符查询
使用关系运算符(<、<=、=、>=、>)进行条件查询。
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name operator value;
2. 使用IN关键字查询
使用IN关键字查询满足一组值的数据。
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name IN (value1, value2, ...);
3. 使用BETWEEN AND关键字查询
使用BETWEEN AND关键字查询某个范围的数据。
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name BETWEEN value1 AND value2;
4. 使用空值查询
使用IS NULL关键字查询空值。
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name IS NULL;
5. 使用AND关键字查询
使用AND关键字进行多条件查询。
代码语言:sql复制SELECT column_name FROM table_name WHERE condition1 AND condition2;
6. 使用OR关键字查询
使用OR关键字进行多条件查询。
代码语言:sql复制SELECT column_name FROM table_name WHERE condition1 OR condition2;
7. 使用LIKE关键字查询
使用LIKE关键字进行模糊查询。
7.1 普通字符串
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name LIKE 'value%';
7.2 含有%通配的字符串
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name LIKE '%value%';
7.3 含有_通配的字符串
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name LIKE '_alue';
8. 使用LIMIT限制查询结果的数量
使用LIMIT关键字限制查询结果的数量。
代码语言:sql复制SELECT column_name FROM table_name LIMIT offset, count;
9. 使用GROUP BY进行分组查询
使用GROUP BY关键字对查询结果进行分组。
代码语言:sql复制SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name;
9.1 GROUP BY和聚合函数一起使用
代码语言:sql复制SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;
9.2 GROUP BY和聚合函数以及HAVING一起使用
代码语言:sql复制SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;
10. 使用ORDER BY对查询结果排序
使用ORDER BY关键字对查询结果进行排序。
代码语言:sql复制SELECT column_name FROM table_name ORDER BY column_name ASC/DESC;
十二、别名设置
1. 为表取别名
使用AS关键字为表取别名。
代码语言:sql复制SELECT column_name FROM table_name AS alias_name;
2. 为字段取别名
使用AS关键字为字段取别名。
代码语言:sql复制SELECT column_name AS alias_name FROM table_name;
十三、表的关联关系
表的关联关系用于查询涉及多个表的数据,请参考关于关联查询的内容。
1. 关联查询
使用JOIN关键字进行表的关联查询。
代码语言:sql复制SELECT columns
FROM table1 JOIN table2 ON condition;
2. 关于关联关系的删除数据
在删除涉及到关联关系的数据时,需要小心处理,以确保数据的完整性和一致性。
十四、多表连接查询
1. 交叉连接查询
使用CROSS JOIN语句进行交叉连接查询。
代码语言:sql复制SELECT * FROM table1 CROSS JOIN table2;
2. 内连接查询
使用INNER JOIN语句进行内连接查询。
代码语言:sql复制SELECT columns
FROM table1 INNER JOIN table2 ON condition;
3. 外连接查询
使用LEFT JOIN或RIGHT JOIN语句进行外连接查询。
3.1 左(外)连接查询
代码语言:sql复制SELECT columns
FROM table1 LEFT JOIN table2 ON condition;
3.2 右(外)连接查询
代码语言:sql复制SELECT columns
FROM table1 RIGHT JOIN table2 ON condition;
十五、子查询
子查询是指在查询中嵌套使用的子语句。
1. 带比较运算符的子查询
使用比较运算符对子查询结果进行筛选。
代码语言:sql复制SELECT column_name FROM table_name WHERE column_name operator (SELECT column_name FROM table_name);
2. 带EXISTS关键字的子查询
使用EXISTS关键字来判断子查询是否返回结果。
代码语言:sql复制SELECT column_name FROM table1 WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);
3. 带ANY关键字的子查询
使用ANY关键字来比较子查询的结果。
代码语言:sql复制SELECT column_name FROM table1 WHERE column_name operator ANY (SELECT column_name FROM table_name WHERE condition);
4. 带ALL关键字的子查询
使用ALL关键字来比较子查询的结果。
代码语言:sql复制SELECT column_name FROM table1 WHERE column_name operator ALL (SELECT column_name FROM table_name WHERE condition);;
总结
本文按照提供的标题,结合MYSQL的基本知识点,从SQL的概述、数据库范式、数据类型、基本操作、约束、数据插入、数据更新、数据删除、简单查询、函数、条件查询、表关联关系、多表连接查询、子查询等多个方面进行了详细的介绍。希望这篇文章可以帮助你入门MYSQL,更好地理解和使用MYSQL。通过不断地学习和实践,相信你可以掌握MYSQL的基本操作和常用技巧,成为一名合格的MYSQL开发者。