MySQL条件查询,主要是对数据库里面的数据按照一定条件进行筛选,主要依靠的是WHERE语句进行。
先来了解一下基础的条件运算。
关系运算符
逻辑运算符
逻辑运算符优先级:NOT>AND>OR,关系运算符>逻辑运算符
SQL特殊运算符
WHERE子句用法
想要从数据表中查找来自内蒙古的所有学生,则可以编写如下带有WHERE子句的SELECT语句。
SELECT * FROM student WHERE origin='内蒙古自治区';
查询数值数据
从course表中,查询所有3学分的课程信息。
SELECT * FROM course WHERE credit=3;
从course表中,查询所有学分不小于3的课程的课名和课号。
SELECT course AS 课名, ID AS 课号 FROM course WHERE credit>=3;
从score表中,查询总成绩大于等于90的学生学号和这门课的课号。
SELECT s_id AS 学号, c_id AS 课号, result1*0.7+result2*0.3 AS 总成绩
FROM score
WHERE result1*0.7+result2*0.3>=90
注意:上面WHERE子句中的条件表达式不可以写为如下形式:总成绩>=90
因为WHERE子句在SELECT子句之前执行,所以在WHERE子句执行时还并没有执行给计算字段(result1*0.7+result2*0.3)取别名的操作
查询字符数据
从student表中,查询名叫“张三”的学生。
SELECT *
FROM student
WHERE name='张三'
从student表中,查询非计科系的所有学生。
SELECT *
FROM student
WHERE institute<>'计算机学院'
从course表中,查询课号ID大于“003”的课程信息。
SELECT *
FROM course
WHERE ID>'003'
(字符串比较大小,其实是在比较每个字符的ASCII码值,ASCII码大的字符为大。人们经常使用的字符里数字字符“0”的ASCII码是48,“1”的ASCII码是49等,以此类推向后递增;大写英文字母“A”的ASCII码是65,“B”的ASCII码是66等,以此类推向后递增;小写英文字母“a”的ASCII码是97,“b”的ASCII码是98等,以此类推向后递增。因此,每个排列的后面的字符都比前面的要大。汉字比较大小时比较的是拼音,例如,“张”比“王”大,因为“z”大于“w”。下面看一个汉字比较的例子汉字比较的例子。)
SELECT *从student表中,查询姓名按拼音排在“马六”后的所有学生的姓名,来源地和所属院系。
SELECT name AS 姓名, origin AS 来源地, institute AS 所属院系 FROM student
WHERE CONVERT(name USING GBK)>CONVERT('马六' USING GBK);
查询日期数据
从student表中,查询1998年1月1日之后出生的学生姓名、联系方式和所属院系。
SELECT name AS 姓名, contact1 AS 联系方式1, contact2 AS 联系方式2, institute AS 所属院系
FROM student
WHERE birthday>'1998-1-1';
按范围查询数据
从score表中,查询考试成绩result1字段在70~80分之间的所有学生的学号和这门课程的课号和考试成绩。
SELECT s_id AS 学号, c_id AS 课号, result1 AS 考试成绩
FROM score WHERE result1 BETWEEN 70 AND 80;
从student表中,查询1997年1月1日~1999年1月1日之间出生的学生姓名、出生日期和所属院系。
SELECT name AS 姓名, birthday AS 出生日期, institute AS 所属院系
FROM student
WHERE birthday BETWEEN '1997/01/01' AND '1999/01/01';
查询空值
从student表中,查询联系方式2字段“contact2”为空的所有学生的信息。
SELECT *
FROM student
WHERE contact2 IS NULL;
从student表中,查询联系方式2字段“contact2”不空的学生姓名,所有联系方式和所属院系。
SELECT name AS 姓名, contact1 AS 联系方式1, contact2 AS 联系方式2, institute AS 所属院系
FROM student
WHERE contact2 IS NOT NULL;
排序条件查询结果
从student表中,查询联系方式2字段“contact2”不空的学生学号、姓名、所有联系方式和所属院系。并且按学号升序进行排序。
SELECT ID AS 学号, name AS 姓名, contact1 AS 联系方式1, contact2 AS 联系方式2, institute AS 所属院系
FROM student WHERE contact2 IS NOT NULL
ORDER BY ID;
(注意:如果SELECT语句中有ORDER BY子句,则必须将其放在WHERE子句之后)
查询前n条记录
从student表中,查询生日最大的前5名学生的姓名和联系方式1。
主要是LIMIF 关键字的这个用法
SELECT name AS 姓名, contact1 AS 联系方式1, birthday AS 出生日期 FROM student
ORDER BY birthday LIMIT 5;