文章目录
SQL_(AND,OR,NOT)与或非
AND&OR
运算符用于根据一个以上的条件过滤记录,即用于组合多个条件以缩小SQL语句中的数据。WHERE子句可以与AND,OR和NOT
运算符结合使用
AND和OR运算符用于根据多个条件筛选记录:
- 如果由
AND
分隔的所有条件为TRUE
,则AND
运算符显示记录。 - 如果使用
AND
运算符组合N个条件。对于SQL
语句执行的操作(无论是事务还是查询),所有由AND
分隔的条件都必须为TRUE。
- 如果由
OR
分隔的任何条件为真,则OR
运算符显示记录。 - 如果使用
OR
运算符组合N
个条件。对于SQL语句执行的操作(无论是事务还是查询),OR
分隔的任何一个条件都必须为TRUE。 - 如果条件不为
TRUE
,则NOT
运算符显示记录。
AND语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
选择Java1_student中,年龄大于21并且成绩高于60的人
SELECT * FROM Java1_student
where Java1_age>21
AND Java1_grade>60;
OR语法
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
选择Java1_student中,年龄小于21,或者成绩低于60的人
SELECT * FROM Java1_student
where Java1_age<21
or Java1_grade<60;
NOT语法
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
SELECT * FROM Java1_student
where not Java1_grade=35;
SQL_连接(Join)
SQL join
用于把来自两个或多个表的行结合起来。就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。- 连接是在WHERE子句中执行的。可以使用几个操作符连接表,例如
=、<、>、<=、>=、!=、BETWEEN、LIKE、 和NOT。
SQL_内部连接(INNER JOIN)
- 内部链接
INNER JOIN
关键字选择两个表中具有匹配值的记录。
INNER JOIN 语法
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
INNER JOIN 与 JOIN 是相同的,
Java1_student表
Java1_studentGrade表
使用 INNER JOIN连接两个表并按照成绩从高到低返回学生信息
SELECT Java1_student.id, Java1_student.name,Java1_studentGrade.id,Java1_studentGrade.Grade
FROM Java1_student
INNER JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;
注意:
如果表中至少有一个匹配项,INNER JOIN
关键字将返回一行。如果 “Student” 表中的行与"studentGrade" 不匹配,则不会列出行。
SQL_左连接
- SQL左链接
LEFT JOIN
关键字返回左表(表1)中的所有行,即使在右表(表2)中没有匹配。如果在正确的表中没有匹配,结果是NULL
。
LEFT JOIN 语法一:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
LEFT JOIN 语法二:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
连接两个表并按照成绩从高到低返回学生信息
SELECT Java1_student.id, Java1_student.name,Java1_student.sex,Java1_studentGrade.id,Java1_studentGrade.Grade
FROM Java1_student
LEFT JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;
注意:
LEFT JOIN 关键字返回左表
(student)中的所有行,即使在右边表(studentGrade)中没有匹配。
SQL_右连接(RIGHT JOIN)
RIGHT JOIN
关键字返回右表(table2)的所有行,即使在左表(table1)上没有匹配。如果左表没有匹配,则结果为NULL
。
右连接语法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
注意:
- 在一些数据库中,
RIGHT JOIN 称为 RIGHT OUTER JOIN。
注意:RIGHT JOIN
关键字返回右表(studentGrade)
的所有行,即使在左表(student)
中没有匹配。
SELECT Java1_student.id, Java1_student.name,Java1_student.sex,Java1_studentGrade.id,Java1_studentGrade.Grade
FROM Java1_student
RIGHT JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;
SQL_完整外部连接(FULL OUTER JOIN)
- 当左(表1)或右(表2)表记录匹配时,
FULL OUTER JOIN
关键字将返回所有记录 FULL OUTER JOIN
可能会返回非常大的结果集!
完整外部连接语法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
SELECT Java1_student.id, Java1_student.name,Java1_studentGrade.Grade
FROM Java1_student
FULL OUTER JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;
注意
FULL OUTER JOIN
关键字返回左表(StudentGrade)中的所有行,以及右表(student)中的所有行。- 如果 "StudentGrade"中的行中没有"student"中的匹配项,或者"student"中的行中没有 "StudentGrade"中的匹配项,那么这些行也会列出。
SQL_自连接
- 自联接是一种常规联接,但表本身是连接的。
自连接语法
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
SELECT Java1_student.id, Java1_student.name,Java1_studentGrade.Grade
FROM Java1_student,Java1_studentGrade
WHERE Java1_student.id = Java1_studentGrade.id;