各位老铁,今天咱们来聊聊SQL,这可是每个程序猿的必修课。啥是SQL?结构化查询语言,全名是Structured Query Language。你天天和数据打交道,不会这个还怎么混?
今天这篇文章,咱不整那些花里胡哨的术语,直接来点硬货。咱们一步步剖析SQL,从基础到进阶,全都给你掰开了揉碎了讲。话不多说,戴上你的编程帽子,拿起键盘,咱们开始这趟SQL的奇妙之旅吧!
本文写的很长很长,整整14页,建议收藏
本文覆盖的 SQL 命令
重要的事情,说三遍,收藏,点赞,分享
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面试真题、简历模版,工作经验分享、架构师成长之路,等等什么都有,欢迎收藏和转发。