什么是SQL判断语句
SQL是Structured Query Language(结构化查询语言)的缩写,是用于管理关系数据库管理系统的编程语言之一。在SQL中,判断语句可以通过条件判断的方式让程序根据不同的条件执行不同的操作。
--基本语法格式
IF 条件 THEN
执行语句;
ELSEIF 条件 THEN
执行语句;
ELSE
执行语句;
END IF;
IF判断语句
IF判断语句用于判断一个条件是否成立,若成立则执行指定的语句。其中条件可以是任意表达式,返回值为TRUE,FALSE或NULL都可以。如果条件成立,那么就执行紧随其后的语句。
下面的例子中,我们通过判断age是否大于18来决定是否允许用户注册:
IF (age>18) THEN
INSERT INTO users (name, password) VALUES ('Tom', '123456');
END IF;
如果age>18,那么就会执行插入用户信息的语句,否则不执行任何操作。
IF...ELSEIF...ELSE判断语句
IF...ELSEIF...ELSE语句可以按照多个条件进一步判断,若前一个条件不满足,则接着判断下一个条件,以此类推。如果所有的条件都不成立,则执行ELSE子句中指定的语句。
下面的例子中,我们加入了ELSEIF子句,如果age>18不成立,则进一步判断age是否大于16:
IF (age > 18) THEN
INSERT INTO users (name, password) VALUES ('Tom', '123456');
ELSEIF (age > 16) THEN
INSERT INTO users (name, password) VALUES ('Jerry', '123456');
ELSE
PRINT 'You are too young to register!';
END IF;
如果age>18,则插入Tom的信息;如果age<=18并且age>16,则插入Jerry的信息;否则输出“You are too young to register!”。
SQL多表查询
在实际应用中,需要从多个表中获取数据时,就需要使用到多表查询。多表查询指的是通过SQL语句同时查询多个表中的数据,并对结果做出合并、过滤等处理。
内连接查询
内连接查询是指根据两个表中列的关系匹配符合条件的行,将这些行合并成一个结果集。常用的内连接有三种:
等值连接:根据两个表中严格相等的字段值来关联数据。
自连接:指在同一个表中,使用别名查询不同的数据。
非等值连接:根据两个表中非严格相等的字段值来关联数据。
等值连接
等值连接是通过对两个表中列的关联,找到对应的行数据,再将匹配的数据合并为一个结果集。下面的例子中,我们通过JOIN关键字实现了两个表之间的内连接查询:
--查询两张表中所有匹配的记录
SELECT *
FROM table1
JOIN table2
ON table1.column = table2.column;
其中table1和table2是要查询的两张表,column是两张表中都有的列名,且在两个表格中都要相同。
例如:
--假设有表格table1如下:
+----+-------+--------+
| id | name | gender |
+----+-------+--------+
| 1 | Tom | male |
| 2 | Jerry | male |
| 3 | Lucy | female |
+----+-------+--------+
--还有另外一张表格table2
+----+-------+--------+
| id | phone | email |
+----+-------+--------+
| 1 | 1234 | x@y.com|
| 2 | 5678 | y@z.com|
| 4 | 9876 | z@x.com|
+----+-------+--------+
--我们可以通过下面的SQL语句查询两张表之间的关联
SELECT *
FROM table1
JOIN table2
ON table1.id = table2.id;
--结果如下:
+----+-------+--------+-------+--------+
| id | name | gender | phone | email |
+----+-------+--------+-------+--------+
| 1 | Tom | male | 1234 | x@y.com|
| 2 | Jerry | male | 5678 | y@z.com|
注:最后的结果中只包含满足条件的记录,即只会返回表1和表2中id对应的两行记录。
自连接
自连接就是在同一个表中使用别名查询不同的数据。常用的场景包括针对具有“主从关系”的数据,如员工和领导的关系等等。
下面的例子中,我们用了两个别名表t1和t2来分别表示同一个表,并用JOIN关键字来关联数据:
--查询同一张表中两列不同记录的关系
SELECT t1.name, t2.name
FROM users t1
JOIN users t2
ON t1.id = t2.manager_id;
这里我们用了users这个表,通过别名表t1和t2来查询同一个表中不同列之间的关系。
非等值连接
非等值连接是指根据两个表格中满足特定条件的数据进行双向查询。例如下面的例子就是用非等值连接,在两个表格中查询出salary>=3000和员工关系的信息:
--查询两张表中不同列之间的关系
SELECT *
FROM employees
JOIN salaries
ON employees.emp_no = salaries.emp_no AND salaries.salary >= 3000;
这里,我们通过JOIN关键字关联了表格employees和表格salaries。第一个条件是employees表格中的emp_no列等于salaries表格中的emp_no列,第二个条件是salaries表格中的salary列大于或等于3000。
外连接查询
外连接查询是指根据两个表格中列的关系,获取符合条件的行数据,并使用NULL填充未匹配的数据。外连接分为左连接、右连接和全连接三种。
左连接查询
左连接查询即查询左表的全部数据和右表的符合条件的数据链接在一起,并用NULL填充未匹配的右表数据。在左连接查询中,左表是主表,右表是辅表。
下面的例子中,我们用LEFT JOIN关键字实现了左连接查询:
--查询两张表中左表的全部数据和右表中所有匹配的记录
SELECT *
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
这里,我们查询了表1中所有数据和表2中所有与表1匹配的记录,并用NULL填充未匹配的数据。
右连接查询
右连接查询即查询右表的全部数据和左表符合条件的数据链接在一起,并用NULL填充未匹配的左表数据。在右连接查询中,右表是主表,左表是辅表。
下面的例子中,我们用RIGHT JOIN关键字实现了右连接查询:
--查询两张表中右表的全部数据和左表中所有匹配的记录
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
这里,我们查询了表2中所有数据和表1中所有与表2匹配的记录,并用NULL填充未匹配的数据。
全连接查询
全连接查询即查询两个表的全部数据,返回的结果集中同时包括左表和右表的所有行,其中未匹配的数据为空值。
下面的例子中,我们用FULL JOIN关键字实现了全连接查询:
--查询两张表中所有匹配的和未匹配的记录
SELECT *
FROM table1
FULL JOIN table2
ON table1.column = table2.column;
这里,我们查询了表1和表2中所有匹配的和未匹配的记录,并将未匹配的数据填充为空值。
总结
SQL判断语句和多表查询是SQL编程中常用的关键字和操作,可以根据具体的需求灵活运用。熟练使用这些语句和操作可以帮助我们更高效地查询数据和更新数据。