MYSQL中的主要查询方法

#简单查询

#查询表中的所有数据
SELECT * FROM test;

#查询表中的指定列的数据
SELECT cid,cname FROM test;

#过滤重复的数据
SELECT DISTINCT category FROM test;

# 给表起别名(只是显示名改变实际名称未改变)
SELECT * FROM test AS te;
SELECT * FROM test te;

#给表中的字段起别名;若有想加入的数据有空格需引号引起来
SELECT cname AS 商品名称,cprice AS 商品价格 FROM test;
SELECT cname 商品名称1,cprice '商品 价格1' FROM test;

#查询 语句中 可以直接进行数据运算
SELECT (1+1);

#查询商品名称和商品的价格涨价 商品价格+1000
SELECT * FROM test;
SELECT cname,cprice+1000 AS cprice FROM test;
SELECT cid+1000 FROM test;


#分页查询
# 只要查询前6条
SELECT * FROM test LIMIT 6;
# 分页查询 每页显示五条 查询第一页
SELECT * FROM test LIMIT 0,5;
# 分页查询 每页显示五条 查询第二页
SELECT * FROM test LIMIT 5,5;
# 分页查询 每页显示五条 查询第二页
SELECT * FROM test LIMIT 10,5;

 

# 模糊查询

# 查询商品名称以‘海澜’开头的商品信息 %表示多个字符
SELECT * FROM test WHERE cname LIKE '海澜%';

# 查询商品名称以‘海澜’开头且后方有两个字符的商品信息
SELECT * FROM test WHERE cname LIKE '海澜__';

# 查询商品名称有三个字符的商品信息 _表示单个字符
SELECT * FROM test WHERE cname LIKE '___';

#若需查询带有%字符的信息,可以加转译字符\或者自定义转译字符
SELECT * FROM test WHERE cname LIKE '%:%%' ESCAPE ':';


#条件查询
#在查询语法中可以在后方加入 逻辑约束条件; 确定查询范围

#查询商品名称为海澜之家的商品的所有的信息
SELECT * FROM test WHERE cname='海澜之家';
#查询价格为5000的商品
SELECT * FROM test WHERE cprice=5000;
#查询价格不为5000的商品
SELECT * FROM test WHERE cprice!=5000;
SELECT * FROM test WHERE cprice<>5000;
#查询价格大于500的商品
SELECT * FROM test WHERE cprice>500;
#查询价格10-1000之间的商品
SELECT * FROM test WHERE cprice>=10 && cprice<=1000;
SELECT * FROM test WHERE cprice BETWEEN 10 AND 100;
#查询价格是10或者是46元的商品
SELECT * FROM test WHERE cprice IN(19,46);
SELECT * FROM test WHERE cprice=19 OR cprice=5000;
#按分类的不同查询
SELECT * FROM test WHERE category IS NULL;# 是空
SELECT * FROM test WHERE category IS NOT NULL;# 是不空
SELECT * FROM test WHERE NOT(category IS NULL);#与上一条效果相同

#查询某范围内的数可以用in
SELECT * FROM test WHERE cid IN(1,2,3,4);

#查询两种不同类型的限制可以用or,若需要同时满足两种用and即可
SELECT * FROM test WHERE cid IN(1,2,3,4) OR cname LIKE ('___');


#排序查询 ASC 升序 DESC 降序

#升序查询
SELECT * FROM product ORDER BY price ASC;
#默认排序查询,默认升序
SELECT * FROM product ORDER BY price;
#降序查询
SELECT * FROM product ORDER BY price DESC;

#显示价格 去掉重复的价格 并依照价格降序
SELECT DISTINCT price FROM product ORDER BY price DESC;

#对文本类型的分类也可以进行降序排序,不过规则不同
SELECT * FROM product ORDER BY category_id DESC;

 


#聚合(函数)查询

#count 统计指定列不为null 行数,不建议用COUNT(*),如果有需要用COUNT(1)效率高;
SELECT COUNT(cname) FROM test;

#sum 指定列的数值和 如果指定的列不是数值类型 结果为0
SELECT SUM(cprice) FROM test;

#max指定列的最大值 如果指定的列是字符串类型 使用字符串排序运算
SELECT MAX(cprice) FROM test;

#min指定列的最小值 如果指定的列是字符串类型 使用字符串排序运算
SELECT MIN(cprice) FROM test;

#avg 平均值 如果指定的列不是数值类型 那么计算结果为零
SELECT AVG(cprice) FROM test;

#查询分别满足条件的值
#select count(字段|*),sum(字段),max(字段),min(字段),avg(字段)from 表名;
SELECT COUNT(cprice),SUM(cprice),MAX(cprice),MIN(cprice),AVG(cprice) FROM test;

 

#分类查询

#按商品的类别进行分组 统计各个分类商品的个数
SELECT category_id,COUNT(*) FROM product GROUP BY category_id;

#按商品的类别进行分组 统计各个分类商品的平均价格
SELECT category_id,AVG(price) FROM product GROUP BY category_id;


#where 用于分组前进行条件过滤
#having 用于分组后 对分完组的数据进行过滤

# 先按商品的类别分组 统计各个分组商品的个数 只查询每组商品大于200的商品
SELECT category_id,COUNT(*) FROM product WHERE price>200 GROUP BY category_id;

# 先按商品的类别分组 统计各个分组商品的个数 只显示统计个数等于三的信息
SELECT category_id,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*)=3;

 

#连接查询

#内连接,查询的数据在多个有关联的表中
SELECT cgtable.cid,test.cname,test.category
FROM test INNER JOIN cgtable#确定连接方式,inner为内连接,outer为外连接
ON test.cid=cgtable.cid;#确定连接条件

#外连接,又分为(左)右连接查询方式与内相同但结果记录不同
SELECT cgtable.cid,test.cname,test.category
FROM test LEFT JOIN cgtable
ON test.cid=cgtable.cid;

#在内连接中不满足条件的数据不显示,外连接则可以显示
#不过依据左右连接的不同,保留的数据不同,没有的数据显示为null

#自连接,可视为对两个相同的表进行连接查询
SELECT t.cid,t.cname,s.category
FROM test AS t,test AS s
WHERE t.cid=s.cid;

#等值连接,效果与内连接相同
SELECT cgtable.cid,test.cname,test.category
FROM test,cgtable
WHERE test.cid=cgtable.cid;

#非等值连接,返回所有匹配记录,所得行数=表a的行数*表b的行数
SELECT cgtable.cid,test.cname,test.category
FROM test,cgtable;


#子查询,即在WHERE内部嵌套另一个查询条件
SELECT cgtable.cid,test.cname,test.category
FROM test,cgtable
WHERE test.cid=(SELECT cid FROM test WHERE cid=4);

上一篇:小菜鸟之Oracle数据库


下一篇:easyui+ef实现省市区三级联动