14页:SQL 速成手册,收藏不学习系列

213 阅读7分钟

各位老铁,今天咱们来聊聊SQL,这可是每个程序猿的必修课。啥是SQL?结构化查询语言,全名是Structured Query Language。你天天和数据打交道,不会这个还怎么混?

image.png

今天这篇文章,咱不整那些花里胡哨的术语,直接来点硬货。咱们一步步剖析SQL,从基础到进阶,全都给你掰开了揉碎了讲。话不多说,戴上你的编程帽子,拿起键盘,咱们开始这趟SQL的奇妙之旅吧!

本文写的很长很长,整整14页,建议收藏

image.png

本文覆盖的 SQL 命令

image.png

重要的事情,说三遍,收藏,点赞,分享

SQL的基本操作

1. 基本查询语句

SELECT:从数据库里捞数据,这是SQL的基本操作。

SELECT column1, column2 FROM table_name;

WHERE:设置条件过滤数据,精确查询。

SELECT column1, column2 FROM table_name WHERE condition;

ORDER BY:排序,按照指定列进行升序或降序排列。

SELECT column1, column2 FROM table_name ORDER BY column1 ASC;
SELECT column1, column2 FROM table_name ORDER BY column1 DESC;

DISTINCT:去重,返回唯一值。

SELECT DISTINCT column1 FROM table_name;

LIMIT:限制返回的行数,防止数据量过大。

SELECT column1 FROM table_name LIMIT 10;

OFFSET:分页查询,跳过指定行数。

SELECT column1 FROM table_name LIMIT 10 OFFSET 5;

GROUP BY:分组,通常与聚合函数一起使用。

SELECT column1, COUNT(*) FROM table_name GROUP BY column1;

HAVING:过滤分组后的结果,常与GROUP BY一起用。

SELECT column1, COUNT(*) FROM table_name GROUP BY column1 HAVING COUNT(*) > 1;

2. 表操作语句

CREATE TABLE:创建新表,定义表结构。

CREATE TABLE table_name (
    column1 INT PRIMARY KEY,  -- 主键
    column2 VARCHAR(255),
    column3 DATE
);

ALTER TABLE:修改表结构,添加、删除或修改列。

ALTER TABLE table_name ADD column4 INT;
ALTER TABLE table_name DROP COLUMN column3;
ALTER TABLE table_name MODIFY COLUMN column2 TEXT;

DROP TABLE:删除表,连同数据一起删掉。

DROP TABLE table_name;

TRUNCATE TABLE:清空表,保留表结构,删除所有数据。

TRUNCATE TABLE table_name;

3. 数据操作语句

INSERT INTO:插入数据到表中。

INSERT INTO table_name (column1, column2) VALUES (1, 'value2');

INSERT INTO ... SELECT:从一个表中选择数据插入到另一个表中。

INSERT INTO table_name2 (column1, column2) SELECT column1, column2 FROM table_name1 WHERE condition;

UPDATE:更新表中的数据。

UPDATE table_name SET column1 = 'new_value' WHERE condition;

DELETE:删除表中的数据,指定条件。

DELETE FROM table_name WHERE condition;

MERGE:合并,基于条件更新或插入数据(部分数据库支持)。

MERGE INTO table_name1 AS target USING table_name2 AS source
ON (target.id = source.id)
WHEN MATCHED THEN
    UPDATE SET target.column1 = source.column1
WHEN NOT MATCHED THEN
    INSERT (column1, column2) VALUES (source.column1, source.column2);

4. 函数与聚合操作

COUNT:计算行数。

SELECT COUNT(*) FROM table_name;

SUM:计算总和。

SELECT SUM(column1) FROM table_name;

AVG:计算平均值。

SELECT AVG(column1) FROM table_name;

MIN:找最小值。

SELECT MIN(column1) FROM table_name;

MAX:找最大值。

SELECT MAX(column1) FROM table_name;

ROUND:四舍五入。

SELECT ROUND(column1, 2) FROM table_name;

CONCAT:字符串连接。

SELECT CONCAT(column1, ' ', column2) FROM table_name;

5. 子查询与联接

INNER JOIN:内连接,取两个表中匹配的记录。

SELECT table1.column1, table2.column2
FROM table1
INNER JOIN table2 ON table1.common_column = table2.common_column;

LEFT JOIN:左连接,取左表中所有记录和右表中匹配的记录。

SELECT table1.column1, table2.column2
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column;

RIGHT JOIN:右连接,取右表中所有记录和左表中匹配的记录。

SELECT table1.column1, table2.column2
FROM table1
RIGHT JOIN table2 ON table1.common_column = table2.common_column;

FULL JOIN:全连接,取两个表中所有记录,不管是否匹配。

SELECT table1.column1, table2.column2
FROM table1
FULL JOIN table2 ON table1.common_column = table2.common_column;

CROSS JOIN:交叉连接,笛卡尔积。

SELECT table1.column1, table2.column2
FROM table1
CROSS JOIN table2;

SELF JOIN:自连接,把一个表当作两个表来用。

SELECT a.column1, b.column2
FROM table_name a, table_name b
WHERE a.common_column = b.common_column;

SUBQUERY:子查询,在查询中嵌套另一个查询。

SELECT column1
FROM table_name
WHERE column2 = (SELECT column2 FROM table_name2 WHERE condition);

6. 高级操作

UNION:合并多个SELECT结果,去重。

SELECT column1 FROM table_name1
UNION
SELECT column1 FROM table_name2;

UNION ALL:合并多个SELECT结果,不去重。

SELECT column1 FROM table_name1
UNION ALL
SELECT column1 FROM table_name2;

CASE:条件表达式,用于实现条件逻辑。

SELECT column1,
CASE 
    WHEN condition1 THEN 'result1'
    WHEN condition2 THEN 'result2'
    ELSE 'result'
END as result_column
FROM table_name;

COALESCE:返回第一个非NULL值。

SELECT COALESCE(column1, column2, 'default') FROM table_name;

NULLIF:比较两个表达式,相等返回NULL,不等返回第一个表达式。

SELECT NULLIF(column1, column2) FROM table_name;

EXISTS:判断子查询是否返回结果。

SELECT column1
FROM table_name
WHERE EXISTS (SELECT 1 FROM table_name2 WHERE condition);

NOT EXISTS:判断子查询是否不返回结果。

SELECT column1
FROM table_name
WHERE NOT EXISTS (SELECT 1 FROM table_name2 WHERE condition);

7. 性能优化与安全性

EXPLAIN:查看查询的执行计划,优化查询性能。

EXPLAIN SELECT column1 FROM table_name WHERE condition;

TRANSACTION:事务处理,确保数据的一致性和完整性。

START TRANSACTION;
UPDATE table_name SET column1 = value1 WHERE condition;
COMMIT;

ROLLBACK:回滚事务,撤销未提交的更改。

START TRANSACTION;
UPDATE table_name SET column1 = value1 WHERE condition;
ROLLBACK;

GRANT:授予用户权限。

GRANT SELECT, INSERT ON database_name.table_name TO 'user'@'host';

REVOKE:撤销用户权限。

REVOKE SELECT, INSERT ON database_name.table_name FROM 'user'@'host';

CREATE VIEW:创建视图,保存复杂查询为一个虚拟表。

CREATE VIEW view_name AS
SELECT column1, column2 FROM table_name WHERE condition;

DROP VIEW:删除视图。

DROP VIEW view_name;

8. 字符串函数

UPPER:将字符串转换为大写。

SELECT UPPER(column1) FROM table_name;

LOWER:将字符串转换为小写。

SELECT LOWER(column1) FROM table_name;

LENGTH:获取字符串长度。

SELECT LENGTH(column1) FROM table_name;

SUBSTRING:截取字符串的一部分。

SELECT SUBSTRING(column1, 1, 5) FROM table_name;

TRIM:去掉字符串两端的空格。

SELECT TRIM(column1) FROM table_name;

REPLACE:替换字符串中的子串。

SELECT REPLACE(column1, 'old', 'new') FROM table_name;

CHAR_LENGTH:返回字符串的字符数。

SELECT CHAR_LENGTH(column1) FROM table_name;

9. 日期和时间函数

NOW:获取当前日期和时间。

SELECT NOW();

CURDATE:获取当前日期。

SELECT CURDATE();

CURTIME:获取当前时间。

SELECT CURTIME();

DATE:从日期时间中提取日期部分。

SELECT DATE(column1) FROM table_name;

TIME:从日期时间中提取时间部分。

SELECT TIME(column1) FROM table_name;

YEAR:从日期中提取年份。

SELECT YEAR(column1) FROM table_name;

MONTH:从日期中提取月份。

SELECT MONTH(column1) FROM table_name;

DAY:从日期中提取天数。

SELECT DAY(column1) FROM table_name;

HOUR:从时间中提取小时。

SELECT HOUR(column1) FROM table_name;

MINUTE:从时间中提取分钟。

SELECT MINUTE(column1) FROM table_name;

SECOND:从时间中提取秒。

SELECT SECOND(column1) FROM table_name;

DATEDIFF:计算两个日期之间的差值。

SELECT DATEDIFF(column1, column2) FROM table_name;

DATE_ADD:向日期添加指定的时间间隔。

SELECT DATE_ADD(column1, INTERVAL 1 DAY) FROM table_name;

DATE_SUB:从日期减去指定的时间间隔。

SELECT DATE_SUB(column1, INTERVAL 1 DAY) FROM table_name;

DATE_FORMAT:格式化日期。

SELECT DATE_FORMAT(column1, '%Y-%m-%d') FROM table_name;

10. 数学函数

ABS:返回绝对值。

SELECT ABS(column1) FROM table_name;

CEIL:向上取整。

SELECT CEIL(column1) FROM table_name;

FLOOR:向下取整。

SELECT FLOOR(column1) FROM table_name;

MOD:取模运算,返回余数。

SELECT MOD(column1, 2) FROM table_name;

POWER:返回幂值。

SELECT POWER(column1, 2) FROM table_name;

SQRT:返回平方根。

SELECT SQRT(column1) FROM table_name;

RAND:返回随机数。

SELECT RAND() FROM table_name;

ROUND:四舍五入。

SELECT ROUND(column1, 2) FROM table_name;

TRUNCATE:截断数值。

SELECT TRUNCATE(column1, 2) FROM table_name;

11. 其他操作

CAST:数据类型转换。

SELECT CAST(column1 AS CHAR) FROM table_name;

CONVERT:转换数据类型。

SELECT CONVERT(column1, CHAR) FROM table_name;

IFNULL:返回第一个非NULL值。

SELECT IFNULL(column1, 'default') FROM table_name;

ISNULL:判断是否为NULL。

SELECT ISNULL(column1) FROM table_name;

COALESCE:返回第一个非NULL值。

SELECT COALESCE(column1, column2, 'default') FROM table_name;

GREATEST:返回最大值。

SELECT GREATEST(column1, column2) FROM table_name;

LEAST:返回最小值。

SELECT LEAST(column1, column2) FROM table_name;

SIGN:返回数值的符号。

SELECT SIGN(column1) FROM table_name;

IN:判断值是否在列表中。

SELECT column1 FROM table_name WHERE column1 IN ('value1', 'value2');

BETWEEN:判断值是否在指定范围内。

SELECT column1 FROM table_name WHERE column1 BETWEEN 1 AND 10;

总结一下

好嘞,兄弟们,今天咱们这趟SQL之旅就到这儿了。从基本查询到高级操作,这些SQL命令可都是你在职场上打怪升级的宝贝。记住,技术这东西,练得越多,磨得越快。SQL也是一样,多写多用,熟能生巧。以后再遇到数据库问题,拿出这些招式,妥妥的解决。好了,不多说了,赶紧回去练练手,早晚你也能在这行里称王称霸。未来是你们的,加油吧!

已收录于,我的技术网站:ddkk.com 里面有,500套技术系列教程、1万+道,面试八股文、BAT面试真题、简历模版,工作经验分享、架构师成长之路,等等什么都有,欢迎收藏和转发。