查询的基本结构:
概念:
查询(DQL)是数据库中最为常用和复杂的一种SQL结构,学会编写查询SQL是程序员必须具备的能力。
要从数据库中查询数据,我们要使用SQL的SELECT语句。标准SELECT查询由SELECT子句、FROM子句、WHERE子句、ORDER BY子句组成。
标准结构:SELECT [DISTINCT] {*|列名[别名], .....}
FROM 表名
[WHERE 过滤条件]
[ORDER BY 列1,列2....]
投影操作:
概念:投影才做是查询语句里必须有的子句,关键字则为SELECT。将选择对表中哪些列进行操作,将这些列出现在结果中。
标准结构:SELECT 列1,列2 FROM 表名
书写方法:
1.如果选择某个表中的多个列,那么列名之间用逗号分隔;
2.如果是单个列,只需要列出该列的列名即可;
3.如果选择所有的列,可以简单的用“*”号代替列名列表。
例: Select f_name,f_club from t_player
Select * from t_team; // *表示代表所有的列(不建议使用,要全写)
表前缀:SELECT t_student.姓名 FROM t_sudent
例:Select t_team.f_teamName from t_ team;
列别名:使用别名,可以使SQL语句和返回的数据更用以读懂、更容易理解。在多个表中有同样的别名的时候,使用别名更容易区分;
在列名或表名用AS关键字类提供别名;
语法:SELECT 列A AS A,列B AS B,列C AS C FROM 表名 AS T
当使用表名的别名时,可以在同一SQL语句中的列名使用别名;
例:SELECT T.列A AS A, T.列B AS B,T.列C AS C FROM 表名 AS T
Select f_name as id,f_club from t_player; //as id表示别名
计算列:在数据库管理中,我们也可以执行返回计算列的SELECT查询。返回计算列意味着数据不存在与数据库中,但是可以冲数据库中的数据构造或者计算的来;
例:将每个学生年龄加上10岁显示:
SELECT 年龄+10 FROM t_student
CONCAT函数:做字符串拼接
投影列也可以用字符串连接,MySQL中字符串连接用CONCAT函数,
例:SELECT CONCAT(姓名,‘-’,年龄) FROM t_student
Select concat (f_teamCoach,’是’,f_teamName,’的主教练’) as 描述,f_teamNum as 球员数 from t_team;
排除重复数据:数据库表的同列中,经常有相同值,多次出现。有时需哟啊确保返回唯一的数据行,这时需要使用DISTINCT关键字来排除重复的行数据。
标准结构:SELECT DISTINCT 列1 FROM 表名
SELECT DISTINCT 性别 FROM t_student
返回限定行数的查询:在MySQL中可以限制查询的行数,并制定从第几行开始到第几行结束。
标准结构:SELECT 列1,列2 FROM t_student LIMIT 开始序号,返回的行数
例:Select * from t_player limit 0,50; //查看从0行开始
如果用1个参数,则表示从第一行开始返回制定行数的结果。
如果用2个参数,则表示从指定行开始返回知道那个行数的结果。
注:LIMIT序号是从0开始。LIMIT只能用于MySQL中。
简单查询中的选择操作:
WHERE关键字:
运算符:
单条件选择操作:WHERE子句应用搜索条件SELECT查询获得的数据,搜索条件可以采用不同的形式,但是条件的值都是布尔值。在此情况下,只对“列C = 值”为真的行干星期。如果条件为真,行就被返回;如果为假或UNKNOWN(因为null值的存在),则被忽略。
标准结构:SELECT 列1,列2 FROM 表 WHERE 列3 = 值
例:Select * from t_player where f_club = ‘曼联’;
多条件选择操作:组合WHERE条件
AND:并且
标准结构:SELECT 列A,列B FROM 表 WHERE 条件1 and 条件2
例:SELECT * FROM t_player WHERE f_dateOfBirth>='1980-1-1' AND f_dateOfBirth<='2000-1-1';
OR:或者
标准结构:SELECT 列A,列B FROM 表 WHERE 条件1 or 条件2
例:SELECT * FROM t_player WHERE f_club='曼联' OR f_club='拜仁慕尼黑';
执行返回测试:BETWEEN;一个范围搜索,大于等于下限,并且小于等于上限。
标准结构:SELECT 列A,列B FROM 表 WHERE 列C BETWEEN 下限 AND 上限
例:Select * from t_player where f_number BETWEEN 5 and 8;
定义集合关系:在制定的某几个值中进行搜索
标准结构 IN: SELECT 列A,列B FROM 表 WHERE 列C IN(值集合);
例:Select * from t_player where f_club in ('曼联','拜仁募集黑','ac米兰');
标准结构 NOTIN: SELECT 列A,列B FROM 表 WHERE 列C NOTIN(值集合);
例:Select * from t_player where f_club not in ('曼联','拜仁募集黑','ac米兰'); //not 表示除了
模糊查询:模糊查询是一种比较使用的过滤方式,利用通配符来实现模糊查询。
通配符:“_”通配符:_ 表示任何单个字符;
“%”通配符:% 表示包含零个或多个任意字符
标准结构 LIKE: SELECT 列A,列B FROM 表 WHERE 列C LIKE 模式
例:Select * from t_player where f_club like ‘曼%’;
Select * from t_player where f_club like ‘%米’; //% 不限定字符
Select * from t_player where f_club like ‘_ _’; // _ 一个表示一个字符
Select * from t_player where f_club not like ‘曼%’; //not 表示除了
空查询:在数据库中判断某列师傅为空不能用 = null,而应该用IS null 或 IN not null。使用其它任何比较运算符来匹配null得到的都是FALSE的结果,比较null = null也是返回FALSE。注:不能用=号或!=等号表示
例:SELECT * FROM t_student WHERE 性别 IS null
Select * from t_player where F_club is null; //是空
Select * from t_player where F_club is not null; //not 不是空
简单查询中的排序操作:
概念:排序操作是指当查询的结果投影出来后以哪一列或及列的顺序进行排列。如果不指定则以数据库默认顺序排列。
标准结构:
单列排序:SELECT 列A,列B,列C FROM 表 ORDER BY 列A
例:Select * from t_player ORDER BY f_date OfBirth; //ASC 升序 可不写默认
Select * from t_player ORDER BY f_date OfBirth DESC; // DESC 降序
其中ORDER BY子句指定列A用于数据排序,列A的值可以是字母、数字、时间等。
多列排序:SELECT 列A,列B,列C FROM 表 ORDER BY 列A,列B,列C....
例:Select * from t_player ORDER BY f_dateOfBirth DESC, f_numberDESC;
Select * from t_player wher f_dateOfBirth BETWEEN’1992-1-1’ and ‘1992-12-9’ ORDER BY f_dateOfBirth DESC, f_numberDESC;
其中ORDER BY子句后指定多个列名时,是根据后面列名的顺序确定优先级。
小结:
基本查询SQL的执行顺序
1.执行FROM
2.WHERE条件过滤
3.执行SELECT投影列
4.执行ORDER BY排序