基本查询
SELECT * FROM <tablename>;
SELECT是SQL关键字,SQL关键字是不区分大小写的,但是表名是区分大小写的。SELECT关键字表示查询操作,而*表示查询所有字段。FROM是SQL关键字,表示从哪张表查询。tablename是表名。分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。另外MySQL要求每条SQL语句的结束都需要加上分号。
例如:
SELECT * FROM students;
SELECT语句还可以单独使用,通常用来检查当前数据库连接是否有效。通常是使用SELECT 1;来进行判断。
去除重复结果集。
它可以筛选出字段的所有可能的结果。例如:
结果表明,students表中的性别只有男和女两种。
结果表明,students表中的的class_id只有1,2,3这三种结果。
计算:
例如,我想计算数学和英文的总成绩,那么使用如下语句即可。
SELECT name,math,english,math+english FROM students;
上面的查询结果在成绩都存在的情况下,都是正确的,但是当其中一项为NULL之后,计算的成绩之和也是NULL。这可能和我们的预期不太一致。我们希望成绩和是81.00. 好在SQL提供了IFNULL()来替换NULL为相应的值。例如:
SELECT name,math,english,IFNULL(math,0)+IFNULL(english,0) FROM students;
上述语句中,将math字段中的NULL值替换为0,同理,english字段的NULL值也被替换为0。
起别名
查询结果显示的字段名可能像上面那样,非常难看。不过SQL提供了起别名。起别名使用关键字as,不过as可以省略。下面这两条语句是等价的。
SELECT name as 姓名,math as 数学,english as 英语,math+IFNULL(english,0) as 总分 FROM students;
SELECT name 姓名,math 数学,english 英语,math+IFNULL(english,0) 总分 FROM students;
经过起别名之后,看起来就舒服很多了。
条件查询
SELECT语句可以通过WHERE
条件来设定查询条件。格式如下:
SELECT * FROM <tablename> WHERE <condition>;
WHERE是SQL的关键字,condition是限制条件。
例如:
SELECT * FROM students WHERE score >= 90;
其中条件表达式可以使用AND,OR,NOT关键字来进行条件之间的组合。AND,OR,NOT的意思和C语言中的&&,||,! 没有区别。下面来分别展示一下相关的查询实例。实际上在SQL中使用&&,||,!也是可以的,但是不建议这么做。而是建议使用AND,OR,NOT关键字。同时SQL支持比较操作,
>=(大于等于)
>(大于)
<=(小于等于)
<(小于)
=(等于),注意,这里的判断是否相等是一个等号,而不是C语言中的双等号。
!=(不等于),SQL还提供了<>作为不等于,不常用。
IN(),在括号里的选项都会匹配到。例如:SELECT * FROM students WHERE id IN(1,2);这将查询出id为1和2的所有数据。
如果某个字段为NULL,那么判断是NULL的写法为:SELECT * FROM students WHERE english IS NULL;判断不是NULL的语法是:SELECT * FROM students WHERE english IS NOT NULL;
SELECT * FROM students WHERE score >= 80 AND id = 1;
SELECT * FROM students WHERE score >= 90 OR score <= 60;
SELECT * FROM students WHERE NOT id = 3;
AND, NOT, OR之间存在优先级关系。NOT优先级最高,其次是AND,最后是OR。同1样,和C语言中建议的一样,我们在使用它们的时候,为了使程序方便阅读,建议加上括号。例如:
SELECT * FROM students WHERE (NOT class_id = 3) AND (score >= 80);
模糊查询
模糊查询使用关键字LIKE进行。单个匹配符是"_",多个匹配符是"%"。
首先,给数据库插入几条记录,如下:
INSERT INTO students(class_id,name,gender,math,english) VALUES(2,"马化腾",'M',97.23,91.24),(3,"马云",'M',64.74,98.75),(5,"马德",'M',54.74,78.41);
INSERT INTO students(class_id,name,gender,math,english) VALUES(3,"两马化
云腾",'X',NULL,NULL);
插入之后,数据库如下所示:
SELECT * FROM students WHERE name LIKE "%马%";
SELECT * FROM students WHERE name LIKE "马%";
SELECT * FROM students WHERE name LIKE "马_";