SQL语句不区分大小写,不过,一定要认识到虽然SQL是不区分大小写的,但是表名、列名和值可能有所不同(这有赖于具体的DBMS及其如何配置)。
多数开发人员认为,将SQL语句分成多行更容易阅读和调试
-
检索数据
SELECT 列1,列2... --*表示检索所有列 FROM 表名;
警告:使用通配符(*)
最好别用*,虽然省事,但检索不需要的列通常会降低检索和应用程序的性能
-
检索不同的值
- 例如:需要查询products表中的所有的产品类型,不需要重复的值
SELECT DISTINCT type FROM products;
DISTINCT type 告诉DBMS只返回不同(具有唯一性)的type的值
警告:不能部分使用DISTINCT
DISTINCT关键字作用于后面所有的列,例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的两列完全相同,否则所有的行都会被检索出来。
-
限制行数
在不同数据库中,语法不太相同,这里只记录了MYSQL的语法
- 检索前5行
SELECT type FROM products LIMIT 5;
- 检索第5行起的5行
SELECT type FROM products LIMIT 5 OFFSET 5;
第一个被检索的行是第0行
-
排序检索数据
- 检索数据使用ORDER BY子句,是最后一条子句。
SELECT type FROM products ORDER BY prod_name [ASC];
检索的行根据prod_name排序,默认是ASC升序,DESC降序排序
- 多列排序,比如姓名相同的情况下,按年龄升序排序
SELECT type FROM student ORDER BY stu_name DESC,age;
-
条件检索
只检索特定的数据,需要指定搜索条件,搜索条件也成为过滤条件,使用WHERE子句
SELECT type FROM student WHERE age = 18;
-
WHERE子句操作符
操作符 说明 = 等于 <> 不等于 != 不等于 < 小于 <= 小于等于 ! 不小于 > 大于 >= 大于等于 !> 不大于 BETWEEN a AND b 在指定的两个值之间 IS NULL 为NULL值
-
-
高级条件检索
- 使用AND和OR组合多个条件
- IN操作符指定条件范围
SELECT type FROM student WHERE class in ('1班','2班');
IN功能与OR相当,IN相对于OR,语法更加清晰,一般比OR操作符执行的更快
- NOT操作符
SELECT type FROM student WHERE NOT age = 18;
这里会检索所有年龄不是18的学生,也可以使用!=实现,一般在复杂的子句中会有更好的作用
SELECT type FROM student WHERE NOT class in ('1班','2班');
这里检索所有不是1班和2班的学生
-
使用通配符进行过滤
SELECT type FROM student WHERE name LIKE '张%';
检索所有姓张的学生
通配符 说明 % 任何字符出现任意次数(包含0次) _ 任何字符出现一次 %不会匹配NULL
-
使用注释
# 这是一行注释 /* 多行 注释 */ SELECT type --type表示类型 FROM products LIMIT 5 OFFSET 5;
网友评论