SQL语言查询数据库全攻略
一、SQL语言基础
SQL(Structured Query Language)是用于访问和操作关系型数据库的标准语言,它能够执行各种数据库操作,包括数据查询、数据定义、数据操纵和数据控制等。
(一)基本语法结构
1、SELECT语句
用于从数据库中选择数据,其基本语法为:SELECT 列名1, 列名2,... FROM 表名;
从一个名为students
的表中选择学生的姓名和年龄,可以使用语句:SELECT name, age FROM students;
2、INSERT语句
用于向数据库表中插入新数据,语法为:INSERT INTO 表名 (列名1, 列名2,...) VALUES (值1, 值2,...);
向students
表插入一条新记录,可写为:INSERT INTO students (name, age, gender) VALUES ('Tom', 18, 'male');
3、UPDATE语句
用于更新表中的数据,语法格式是:UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2,... WHERE 条件;
若要将students
表中年龄为18的学生的年龄更新为19,语句为:UPDATE students SET age = 19 WHERE age = 18;
4、DELETE语句
用于删除表中的数据,语法为:DELETE FROM 表名 WHERE 条件;
删除students
表中年龄小于16的学生,可使用:DELETE FROM students WHERE age < 16;
(二)数据类型
1、整数类型
包括TINYINT
(占用1字节,取值范围 128到127)、SMALLINT
(2字节,32768到32767)、INT
(4字节,2147483648到2147483647)、BIGINT
(8字节,9223372036854775808到9223372036854775807)。
在创建表时定义一个学生学号字段为整数类型,若学号范围较小可使用SMALLINT
:CREATE TABLE students (student_id SMALLINT,...);
2、字符串类型
有CHAR
(定长字符型)、VARCHAR
(可变长字符型)等。CHAR(n)
表示长度为n的定长字符串,VARCHAR(n)
表示最大长度为n的可变长字符串。
定义一个学生姓名字段为可变长字符串,最长50个字符,可写为:CREATE TABLE students (name VARCHAR(50),...);
3、日期和时间类型
包括DATE
(只包含日期,格式如YYYYMMDD)、TIME
(只包含时间,格式如HH:MM:SS)、DATETIME
(包含日期和时间,格式如YYYYMMDD HH:MM:SS)。
创建一个订单表,记录订单日期和时间,可定义为:CREATE TABLE orders (order_date DATETIME,...);
二、SQL查询技巧
(一)简单查询
1、查询指定列
可以只选择需要的列进行查询,减少不必要的数据传输,查询员工的工号和姓名,而不是整个员工表的所有信息:SELECT employee_id, name FROM employees;
2、使用别名
为了让查询结果更易于理解,可以为列或表设置别名,如:SELECT e.employee_id AS '工号', e.name AS '员工姓名' FROM employees e;
(二)条件查询
1、比较运算符
包括=
(等于)、<>
(不等于)、>
(大于)、<
(小于)、>=
(大于等于)、<=
(小于等于),查询工资大于5000的员工:SELECT * FROM employees WHERE salary > 5000;
2、逻辑运算符
AND
表示同时满足多个条件,OR
表示满足多个条件中的任意一个,NOT
表示非某个条件,查询年龄在20到30岁之间且性别为男性的员工:SELECT * FROM employees WHERE age >= 20 AND age <= 30 AND gender = 'male';
3、IN运算符
用于判断某列的值是否在指定的一组值中,查询部门编号为1、2或3的员工:SELECT * FROM employees WHERE department_id IN (1, 2, 3);
4、LIKE运算符
用于模糊查询。%
表示任意多个字符,_
表示一个字符,查询名字以“张”开头的员工:SELECT * FROM employees WHERE name LIKE '张%';
(三)排序和限制查询结果
1、ORDER BY子句
可以按照一个或多个列进行升序(ASC)或降序(DESC)排序,按照工资降序排序员工信息:SELECT * FROM employees ORDER BY salary DESC;
2、LIMIT子句
用于限制查询结果的行数,查询前5名工资最高的员工:SELECT * FROM employees ORDER BY salary DESC LIMIT 5;
三、多表查询
(一)连接查询
1、内连接(INNER JOIN)
只返回两个表中满足连接条件的记录,有两个表employees
(员工表)和departments
(部门表),要查询每个员工的姓名和他们所在部门的名称,可以使用内连接:
SQL语句 | 功能 |
SELECT e.name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id; |
查询员工姓名和对应部门名称 |
2、外连接(LEFT JOIN或RIGHT JOIN)
LEFT JOIN
返回左表中的所有记录以及右表中满足连接条件的记录,RIGHT JOIN
则相反,使用左连接查询所有员工信息,即使某些员工没有对应的部门信息也会显示:
SQL语句 | 功能 |
SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id; |
查询所有员工信息及对应的部门名称(若有) |
3、自连接
当一个表需要与自身进行连接时使用,有一个员工表,其中包含员工的上级员工编号,要查询每个员工及其上级的信息:
SQL语句 | 功能 |
SELECT a.name AS employee_name, b.name AS manager_name FROM employees a, employees b WHERE a.manager_id = b.employee_id; |
查询员工及其上级的姓名 |
(二)联合查询(UNION)
可以将两个或多个查询结果合并成一个结果集,要求参与联合的查询的列数和数据类型要相同,查询工资高于6000的员工和部门编号为1的员工:
SQL语句 | 功能 |
SELECT * FROM employees WHERE salary > 6000 UNION SELECT * FROM employees WHERE department_id = 1; |
查询工资高于6000的员工和部门编号为1的员工 |
四、相关问题与解答
(一)问题1:如何使用SQL查询某个表中数据的行数?
答:可以使用COUNT(*)
函数来统计行数,要查询students
表的行数,可以使用语句:SELECT COUNT(*) FROM students;
(二)问题2:在多表查询中,如果连接条件不正确会出现什么情况?
答:如果连接条件不正确,可能会出现查询结果为空或者不符合预期的情况,在连接两个表时,如果连接列的数据类型不匹配或者连接条件的逻辑错误,可能无法正确关联两个表的记录,从而导致查询不到想要的结果。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/140438.html