Mysql单表查询语句大全

-- ----------------
-- ######单表查询##
-- ----------------

-- 查询表所有数据 *所有列
SELECT * FROM websites;
-- 查询某一列
SELECT id,url FROM websites;
-- 根据条件查询某一条数据
SELECT * FROM websites WHERE id='1';
-- 使用别名进行查询操作
SELECT * FROM websites xxoo WHERE xxoo.id=1;
-- 根据条件查询某一列,某字段的数据
SELECT url FROM websites WHERE id='1';
-- 返回唯一不同的值 DISTINCT
SELECT DISTINCT country FROM Websites;
-- 某范围BETWEEN
SELECT * FROM websites WHERE id BETWEEN 1 and 3; 
-- 某范围
SELECT * FROM websites WHERE id >=3 and id<=4; 

-- ------------------------
-- ###正则表达式#########
-- 使用 REGEXP 操作符来进行正则表达式匹配
-- -----------------------
-- 模糊查询中间是o的 ,注意通配符 % 位置
SELECT id,name FROM websites WHERE `name` LIKE "%o%"; 
-- 查找name字段中以'g'为开头的所有数据:
SELECT * FROM websites WHERE `name` REGEXP '^g';
-- 查找name字段中以'宝'为结尾的所有数据:
SELECT * FROM websites WHERE `name` REGEXP '宝$';
-- 查找name字段中包含'米'字符串的所有数据:
SELECT * FROM websites WHERE `name` REGEXP '米';
-- 查找name字段中以元音字符开头或以'宝'字符串结尾的所有数据:
UPDATE websites SET name='alibaba' WHERE id=5;-- 创建测试条件
SELECT * FROM websites WHERE `name` REGEXP '^[aeiou]|宝$';
-- 指定针对某个列的多个可能值
SELECT * FROM websites WHERE id IN(1,3,5); 
SELECT * FROM Websites WHERE `name` IN ('Google','微博');

-- 选取alexa介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站

SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND NOT country IN ('USA', 'IND');
-- 选取 name 以介于 'A' 和 'H' 之间字母开始的所有网站:
SELECT * FROM Websites WHERE `name` BETWEEN 'A' AND 'H';
-- 选取 name 不介于 'A' 和 'H' 之间字母开始的所有网站
SELECT * FROM Websites WHERE `name` NOT BETWEEN 'A' AND 'H';
-- and 和 or 运算符
SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');
-- OR 或 满足其一
SELECT * FROM Websites WHERE country='USA' OR country='CN';
-- AND  并且  全部满足,否则无数据
SELECT * FROM websites WHERE id=1 AND alexa=1;
-- ORDER BY 结果排序 默认升序 ,DESC降序 
SELECT * FROM websites ORDER BY id; 
SELECT * FROM websites ORDER BY id DESC; 

-- WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计
SELECT * FROM employee_tbl;
-- 按名字进行分组,并统计每个人有多少条记录:
SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;

-- 按名字进行分组,再统计每个人登录的次数:
SELECT name, SUM(singin) AS singin_count FROM  employee_tbl GROUP BY `name` WITH ROLLUP; -- NULL 表示所有人的登录次数。
-- 使用 coalesce 来设置一个可以取代 NUll 的名称
-- select coalesce(a,b,c); 
-- 如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)
SELECT coalesce(`name`, '总数'), SUM(singin) AS singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
-- TOP 要返回的记录的数目(SQL SERVER),MySql Oracle 用LIMIT
SELECT * FROM Websites LIMIT 3;

-- -----------------
-- ###NULL 值处理###
-- web页面前端判断设置
-- -----------------
-- 查询某字段是NULL值数据
SELECT * FROM websites WHERE country IS NULL;
-- 查询某字段不是NULL值数据
SELECT * FROM websites WHERE country IS NOT NULL;

-- -------------------
-- 处理重复数据
-- 在建表的时候,建立约束,可避免数据重复
-- -------------------

-- 统计重复数据
SELECT COUNT(*) as repetitions, `name`, url FROM websites
GROUP BY `name`, url HAVING repetitions > 1; -- HAVING子句设置重复数大于1。

-- 过滤重复数据
SELECT DISTINCT `name`, url FROM websites; 

-- 删除重复数据  数据无价谨慎使用
-- 备份
CREATE TABLE websites_tmp 
	SELECT id,`name`, url, alexa,country FROM websites  GROUP BY (id,`name`, url, alexa,country);
-- 删除
DROP TABLE websites;
-- 还原
ALTER TABLE websites_tmp RENAME TO websites;




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值