mysql一些比较冷门的查询

1、创建视图:视图作为一种特殊的表,可以有效的封装sql查询,相当于给表封装上接口

//创建一个getNameAge的视图表,此表的内容为从user表中获取name、age字段,其他字段是不可见的
create view user_name_age as select name, age from user [where condition.....];
//使用视图
select * from user_name_age [where conditon....];
//删除视图
drop view user_name_age;

说到视图不得不提到比较冷门的一点:很多人觉得mysql没有select * from (select * from tableName)这样的查询语法,即在一结果集中二次筛选, 但,Every derived table must have its own alias

//即给结果集表要指定一个别名,这样from才能识别
select * from (select name, age from user) as user_name_age;

其实视图就好比一个查询结果集的别名,只不过他是固化的,而二次筛选指定的是临时的

2、将某一次的查询结果集存储到数据库表中

create table user_name_age as select name, age from user [where condition.....];
create table user_name_age(select name, age from user [where condition.....]);

以上两种方法都可以,第一种方式更能形象的说明view是一张特殊的表

但mysql没有

select * into tempTableName from tableName [where condition...]

方式的,其实一样,这里的tempTableName必须是不存在的表,和我们使用create语句一样

另外在写过程时我们可能会经常用到下面的语法为过程中声明的变量赋值

 select name into variable from tableName

3、将查询结果插入某表中:注意没有 values

insert into user_name_age(name, age) select name, age from user;

4、rollup 和 group_concat() : rollup和group_concat()需要和group by连用,对组单位做统计

select age, count(*), group_concat(name order by name desc) from user group by age with rollup;

以age为分组,对同一age的用户进行分组,汇总他们的名字(group_concat)和人数,并在最后对总人数和总用户名进行汇总(rollup)

时间: 2024-10-22 02:39:17

mysql一些比较冷门的查询的相关文章

mysql基础-数据库多表查询-记录(六)

0x01 MySQL多表查询和子查询 联结查询:事先将两张或者多张表join,根据join的结果进行查询 cross join:交叉联结  用的少, 相当于 (a+b)*(c+d+e) 所得结果的形式   用的少 自然联结  --- 只能在两者相等的情况下才能建立连接 等值联结:把相同的字段进行等值连接 外联结: 左外联接:只保留出现在左外连接元算之前(左边)的关系中的元组(以左表为准,) left_tb LEFT JOIN right_tb ON 条件 右外联接:只保留出现在右外连接元算之后(

MySQL基础学习之数据查询

一般查询 SELECT * FROM 表名 SELECT 属性名  FROM  表名 条件查询 SELECT 属性名 FROM 表名  WHERE 条件表达式 查询数据值1,数据值2的表单 SELECT *  FROM  表名  WHERE  属性名 [NOT] IN(数据值1,数据值2....) 查询数值1,数据2的表单 SELECT *  FROM  表名  WHERE  属性=值  AND 属性1=值1 查询数值1到数值2之间的表单 SELECT *  FROM  表名  WHERE  属

MySQL:动态开启慢查询日志(Slow Query Log)

前言 在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一.要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改 慢日志设置方式 写入文件 写入数据库 实践操作 方式一:写入文件 编辑my.conf 中修改 log_slow_queries 的日志地址 $ cd /etc/mysql $ cat my.cnf |grep slow  log_slow_queries = /data/logs/mysql/mysql-slow.log $ sudo /etc

转Oracle、MySql、SQLServer 数据分页查询

最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询 1.demo简介 这是一个由ExtJs4.2,Mysql5.5 ,Struts2,Hibernate3.3构成的简单web项目,本人由于最近在研究ExtJs所以特意做了这个Demo,方便有需要的同学查看,也给自己留下学习笔记吧.需要特别说明我这里并没有整合Struts,Hibernate,这两个工具是独立运行的.转载请注明:http://blog.csdn.net/qiuzhping/article/details/

mysql根据汉字拼音排序查询

例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chinese_ci. 查询语句如下: select * from label order_by name collate gb2312_chinese_ci; 效果如下: tip:有时候结果不是很准确,不知道是不是因为字符集选择的不当导致的,知道的朋友,请解答下,谢谢! mysql根据汉字拼音排序查询,

mysql简单的单表查询详解

mysql简单的单表查询详解 MySQL的查询操作: 单表查询:简单查询 多表查询:连续查询 联合查询: 选择和投影: 投影:挑选要显示的字段 选择:挑选符合条件的行 投影:SELECT 字段1, 字段2, ... FROM tb_name;  SELECT * FROM tb_name; 选择:SELECT 字段1, ... FROM tb_name WHERE 子句; 布尔条件表达式 mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_IN

MySQL的YEARWEEK函数以及查询本周数据(转)

MySQL的YEARWEEK函数以及查询本周数据 MySQL 的 YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode]) 例如 2010-3-14 ,礼拜天 SELECT YEARWEEK('2010-3-14') 返回 11 SELECT YEARWEEK('2010-3-14',1) 返回 10 其中第二个参数是 mode ,具体指的意思如下: Mode First day of week Range Week 1 is the first we

MySQL由浅入深练级之SELECT查询用法(一)

mysql由浅入深练级之select查询用法(一) 注意: 练习前请先下载附件里的文件,并且将文件导入mysql中,导入方法为mysql -u user -h host -p password < hellodb.sql  多表查询一定要多设定约束条件 SELECT查询练习 首先是连接mysql,我这里没设置密码,直接输入mysql就连接进来了.                 1.先查询有哪些数据库                 mysql> SHOW DATABASES; +------