单表查询:
SELECT
[ DISTINCT ]
[SQL_CACHE | SQL_NO_CACHE]
select_expr [,select_expr ...]
[FROM table_references [ WHERE where_condition ]
[GROUP BY {col_name | expr |}] [HAVING where_condition]
[ORDER BY [ASC | DESC]]
DISTINCT:数据去重
SQL_CACHE:指定存入缓存
SQL_NO_CACHE:指定进行缓存
WHERE子句:指定条件,实现过滤功能
过滤条件:
算数运算:+ - * / % > < >= <=
逻辑运算:AND:与运算 OR:或运算 NOT:非运算
字符比较:= !=
列表元素比较:IN (元素1,元素2,元素3,...)
IS NULL:空
IS NOT NULL:非空
LIKE:模糊匹配,能不用尽量不用
RLIKE:基于正则的模糊匹配,能不用尽量不用
GROUP BY子句:更具指定的条件把匹配的结果进行分组,实现"聚合"运算
常用函数:
sum(条件) #求和
max(条件) #最大值
min(条件) #最小值
avg(条件) #平均值
count(条件) #统计记录数
HAVING:对GROUP BY之后的结果进行过滤
示例:
MySQL> CREATE DATABASE mydb; #创建测试数据库
mysql> USE mydb;
mysql> CREATE TABLE test (id int(50),name varchar(50),qq int(15),gender char(2));#创建测试表
mysql> INSERT INTO test VALUES(1,'zhangshan',12345,'F'); #插入测试数据
mysql> INSERT INTO test VALUES(2,'lisi',123142,'F');
mysql> INSERT INTO test VALUES(3,'zsf',124312,'M');
mysql> INSERT INTO test VALUES(4,'yyy',124312,'F');
mysql> INSERT INTO test VALUES(5,'ytt',124312,'M');
单表查询示例:
mysql> SELECT * FROM test WHERE id>2 AND id<5; #查询ip大于2小于5的数据
mysql> SELECT * FROM test WHERE id>2 GROUP BY gender; #对性别进行分组
mysql> SELECT sum(id),gender FROM test GROUP BY gender; #对性别进行分组,并求他们的id之和
mysql> SELECT * FROM test GROUP BY gender HAVING id>2; #对性别进行分组,显示id大于2的组
多表关联查询:
mysql> CREATE TABLE test2 (emain varchar(200),age int(10)); #创建测试环境
mysql> INSERT INTO test2 values('123@qq.com',10);
mysql> INSERT INTO test2 values('456@qq.com',15);
mysql> INSERT INTO test2 values('789@qq.com',20);
mysql> SELECT test.id,test2.age FROM test,test2 WHERE test.id>2 AND test2.age>10;
test.id #第一章表的id字段
test2.age #第二章表的age字段
test #第一章表 表名
test2 #第二章表 表名
test.id>2 AND test2.age
#拼接显示test的id字段和test2的age字段,但是test的id字段必须大于2并且test2的age字段必须大于10
mysql> SELECT * FROM test,test2 WHERE test.id>2 AND test2.age>10;
#拼接显示test,test2的所有字段,但是test的id字段必须大于2并且test2的age字段必须大于10
当前题目:mysql基础(七)select语句
本文网址:
http://kswsj.cn/article/geiccg.html