SQL查询基础
SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准语言,它允许用户对数据库中的数据进行创建、读取、更新和删除操作,本文将详细介绍SQL查询的各个方面,包括基本语法、常用函数、复杂查询等。
h3 SQL查询的基本语法
h3 SELECT语句
SELECT
语句是SQL中最常用的语句之一,用于从数据库中检索数据,其基本语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition;
column1, column2, ...
: 要检索的列名,可以是多个列。
table_name
: 要查询的表名。
condition
: 可选的条件,用于筛选数据。
要从名为employees
的表中检索所有员工的名字和工资,可以使用以下SQL语句:
SELECT name, salary FROM employees;
h3 WHERE子句
WHERE
子句用于过滤数据,只返回满足条件的记录,条件可以包含各种运算符,如等于(=)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。
要查找工资大于5000的员工,可以使用以下SQL语句:
SELECT name, salary FROM employees WHERE salary > 5000;
h3 ORDER BY子句
ORDER BY
子句用于对结果集进行排序,可以按一个或多个列进行排序,并且可以选择升序(ASC)或降序(DESC)。
要按照工资从高到低的顺序显示员工信息,可以使用以下SQL语句:
SELECT name, salary FROM employees ORDER BY salary DESC;
h3 GROUP BY子句
GROUP BY
子句用于将结果集按照一个或多个列进行分组,通常与聚合函数一起使用,如COUNT(), SUM(), AVG()等。
要计算每个部门的员工数量,可以使用以下SQL语句:
SELECT department, COUNT(*) as num_employees FROM employees GROUP BY department;
h3 HAVING子句
HAVING
子句用于对分组后的结果进行过滤,与WHERE
子句不同的是,HAVING
子句可以包含聚合函数。
要查找员工数量超过10个的部门,可以使用以下SQL语句:
SELECT department, COUNT(*) as num_employees FROM employees GROUP BY department HAVING num_employees > 10;
h3 JOIN操作
JOIN
操作用于将两个或多个表连接在一起,常见的连接类型有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。
INNER JOIN
INNER JOIN返回两个表中匹配的记录,要将employees
表和departments
表连接起来,可以使用以下SQL语句:
SELECT e.name, d.department_name FROM employees e INNER JOIN departments d ON e.department = d.id;
LEFT JOIN
LEFT JOIN返回左表中的所有记录以及右表中匹配的记录,如果右表中没有匹配的记录,则结果为NULL。
SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department = d.id;
RIGHT JOIN
RIGHT JOIN返回右表中的所有记录以及左表中匹配的记录,如果左表中没有匹配的记录,则结果为NULL。
SELECT e.name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department = d.id;
FULL JOIN
FULL JOIN返回两个表中的所有记录,如果其中一方没有匹配的记录,则结果为NULL。
SELECT e.name, d.department_name FROM employees e FULL JOIN departments d ON e.department = d.id;
h3 常用函数
SQL提供了许多内置函数,用于处理数据,以下是一些常用的函数:
字符串函数
UPPER(string)
: 将字符串转换为大写。
LOWER(string)
: 将字符串转换为小写。
LENGTH(string)
: 返回字符串的长度。
CONCAT(string1, string2, ...)
: 连接多个字符串。
SUBSTRING(string, start, length)
: 从字符串中提取子字符串。
数值函数
ABS(number)
: 返回数字的绝对值。
CEIL(number)
: 向上取整。
FLOOR(number)
: 向下取整。
ROUND(number, decimals)
: 四舍五入到指定的小数位数。
MOD(number1, number2)
: 返回两个数相除的余数。
日期和时间函数
NOW()
: 返回当前的日期和时间。
CURDATE()
: 返回当前日期。
CURTIME()
: 返回当前时间。
DATEDIFF(date1, date2)
: 返回两个日期之间的天数差。
DATE_FORMAT(date, format)
: 格式化日期。
聚合函数
COUNT(*)
: 计算行数。
SUM(column)
: 计算某列的总和。
AVG(column)
: 计算某列的平均值。
MAX(column)
: 返回某列的最大值。
MIN(column)
: 返回某列的最小值。
h3 复杂查询示例
子查询
子查询是一个嵌套在另一个SQL语句中的查询,它可以出现在SELECT
、FROM
、WHERE
、HAVING
等位置。
SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
上述查询返回工资高于平均工资的员工。
联合查询(UNION)
联合查询用于合并多个查询的结果集。
SELECT name FROM employees UNION SELECT manager FROM departments;
上述查询返回所有员工和经理的名字,去除重复项。
交叉连接(CROSS JOIN)
交叉连接返回两个表的笛卡尔积,即每个表的每一行都与其他表的每一行配对。
SELECT e.name, d.department_name FROM employees e, departments d;
上述查询返回所有员工与所有部门的组合。
h3 常见问题解答(FAQs)
Q1: 如何在SQL中更新数据?
A1: 使用UPDATE
语句可以更新表中的数据,要将employees
表中某个员工的薪水增加10%,可以使用以下SQL语句:
UPDATE employees SET salary = salary * 1.10 WHERE id = 1234;
Q2: 如何在SQL中删除数据?
A2: 使用DELETE
语句可以删除表中的数据,要删除employees
表中ID为1234的员工,可以使用以下SQL语句:
DELETE FROM employees WHERE id = 1234;
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1266904.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复