教程:MySQL导入示例数据库
具体区别:http://m.php.cn/article/412972.html
以下例子都是在Navicat for MySQL软件下编写,SQL语言不区分大小写,但是关键字通常用大写。
#从一个名为tables的表中检索一个名为col_names的列
select col_name from tables
#检索多个列
select col_1, col_2, col_3 from tables
#检索所有列
select * from tables
#去掉重复项
select distinct col_name from table
#返回前N行
select col_name from tables LIMIT N
#检索从第a+1行开始,累加b条记录 - limit [offset,] N
select col_name from tables LIMIT a,b - 偏移a行,取b条记录
#返回从这一列第M个数(不包括M)开始后的N行
select col_name from tables LIMIT N offset M
在大量数据中,只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
#范围检查
select col_name, price from tables where price between 5 and 10
#空置检查
select col_name from tables where price is null
当然还有其他操作符:
SELECT officeCode from employees WHERE officeCode NOT IN (2,3);
注意:SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
前面介绍的所有操作符都是针对已知值进行过滤的。不管是匹配一个值还是多个值,检验大于还是小于已知值,或者检查某个范围的值,其共同点是过滤中使用的值都是已知的。但是,这种过滤方法并不是任何时候都好用。例如,怎样搜索产品名中包含文本 bean bag的所有产品?用简单的比较操作符肯定不行,必须使用通配符。
Select * from emp where ename like 'M%';
注意:谓词(predicate)
操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE是谓词而不是操作符。
虽然最终的结果是相同的,但应该对此术语有所了解,以免在 SQL文献或手册中遇到此术语时不知所云。
/*
% 表示多个字值,_ 下划线表示一个字符;
M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 表示查询包含M的所有内容。
%M_ : 表示查询以M在倒数第二位的所有内容。
*/
在匹配的时候注意空格,有可能因为原文中多了一个空格,而我们匹配不出来。因此可以用函数去掉空格或者自己加多一个空格。
注意:
COUNT()
* :计数所有选择的行,包括NULL值;
ALL 列名:计数指定列的所有非空值行,如果不写,默认为ALL;
DISTINCT 列名:计数指定列的唯一非空值行
SUM()
只有ALL与DISTINCT两种计数规范,无*。
SQL中数据可以按列名分组,搭配聚合函数十分实用。
分组中也可以加入筛选条件WHERE,不过这里一定要注意的是,执行顺序为:WHERE过滤→分组→聚合函数。
说了WHERE过滤、分组操作、聚合函数的执行顺序,那如果我们希望在聚合之后执行过滤条件怎么办?
所以WHER是分组前对数据进行过滤,HAVING是分组后对数据进行过滤。
这里提及一下SQL的执行顺序:
一、sql执行顺序
(1) from
(3) join
(2) on
(4) where
(5) group by(开始使用select中的别名,后面的语句中都可以使用)
(6) 聚合函数(avg,sum…)
(7) having
(8) select
(9) distinct
(10) order by
(11) limit
存储在数据库表中的数据一般不是应用程序所需要的格式,下面举几个例子。
在上述每个例子中,存储在表中的数据都不是应用程序所需要的。我们需要直接从数据库中检索出转换、计算或格式化过的数据,这就是计算字段可以派上用场的地方了。(字段(field):基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常与计算字段一起使用。)
拼接(concatenate):将值联结到一起(将一个值附加到另一个值)构成单个值。
在MySQL中,使用Concat函数
参考:时间函数
这里详细列出了SQL数值函数:数值函数
这里是某些常用函数的具体用法:具体用法
参考:字符串函数
参考:
SQL编程格式的优化建议
SQL Style Guide
做法一:
做法二:
把内层查询结果作为外层查询的比较条件。
把内层的查询结果当成临时表,供外层sql再次查询。
把外层的查询结果,拿到内层,看内层的查询是否成立。
例如:查询有商品编号的栏目
select cat_id,cat_name from category where exists (select * from goods where goods.cat_id = category.cat_id);