一千行MySQL学习笔记(四)

/* UNION */ ------------------

将多个select查询的结果组合成一个结果集合。

SELECT ... UNION [ALL|DISTINCT] SELECT ...

默认 DISTINCT 方式,即所有返回的行都是唯一的

建议,对每个SELECT查询加上小括号包裹。

ORDER BY 排序时,需加上 LIMIT 进行结合。

需要各select查询的字段数量一样。

每个select查询的字段列表(数量、类型)应一致,因为结果中的字段名以第一条select语句为准。

/* 子查询 */ -----------------

- - 子查询需用括号包裹。

-- from型
  from后要求是一个表,必须给子查询结果取个别名。
 - 简化每个查询内的条件。
 - from型需将结果生成一个临时表格,可用以原表的锁定的释放。

- 子查询返回一个表,表型子查询。

select * from (select * from tb where id>0) as subfrom where id>1;

-- where型

- 子查询返回一个值,标量子查询。
 - 不需要给子查询取别名。
 - where子查询内的表,不能直接用以更新。
select * from tb where money = (select max(money) from tb);

-- 列子查询
  如果子查询结果返回的是一列。

使用 in 或 not in 完成查询
  exists 和 not exists 条件

如果子查询返回数据,则返回1或0。常用于判断条件。
      select column1 from t1 where exists (select * from t2);

-- 行子查询
查询条件是一个行。
  select * from t1 where (id, gender) in (select id, gender from t2);

行构造符:(col1, col2, ...) 或 ROW(col1, col2, ...)

行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。

-- 特殊运算符

!= all() 相当于 not in
  = some() 相当于 in。any 是 some 的别名
  != some() 不等同于 not in,不等于其中某一个。
  all, some 可以配合其他运算符一起使用。

/* 连接查询(join) */ -------------
  将多个表的字段进行连接,可以指定连接条件。

-- 内连接(inner join)

- 默认就是内连接,可省略inner。
  - 只有数据存在时才能发送连接。即连接结果不能出现空行。
  on 表示连接条件。其条件表达式与where类似。也可以省略条件(表示条件永远为真)
也可用where表示连接条件。
还有 using, 但需字段名相同。 using(字段名)

-- 交叉连接 cross join
  即,没有条件的内连接。
 select * from tb1 cross join tb2;

-- 外连接(outer join)

- 如果数据不存在,也会出现在连接结果中。

-- 左外连接 left join
 如果数据不存在,左表记录会出现,而右表为null填充

-- 右外连接 right join
 如果数据不存在,右表记录会出现,而左表为null填充

-- 自然连接(natural join)
自动判断连接条件完成连接。
相当于省略了using,会自动查找相同字段名。

natural join

natural left join

natural right join

(未完待续)
      (作者:Shocker 来源:http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html)

时间: 2024-10-18 03:19:49

一千行MySQL学习笔记(四)的相关文章

一千行MySQL学习笔记

/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES --

一千行MySQL学习笔记【博客园】

/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES --

一千行MySQL学习笔记(十二)

/* 用户和权限管理 */ ----------- 用户信息表:mysql.user -- 刷新权限FLUSH PRIVILEGES -- 增加用户CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 密码(字符串)- 必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限.- 只能创建用户,不能赋予权限.- 用户名,注意引号:如 'user_name'@'192.168.1.1'- 密码也需引号,纯数字密码也要加引号- 要在纯文本中指定密码

一千行MySQL学习笔记(七)

/* 事务(transaction) */ ------------ 事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败. - 支持连续SQL的集体成功或集体撤销. - 事务是数据库在数据晚自习方面的一个功能. - 需要利用 InnoDB 或 BDB 存储引擎,对自动提交的特性支持完成. - InnoDB被称为事务安全型引擎. -- 事务开启 START TRANSACTION; 或者 BEGIN; 开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句. -- 事

一千行MySQL学习笔记(六)

/* 备份与还原 */ ------------- 备份,将数据的结构与表内数据保存起来. 利用 mysqldump 指令完成. -- 导出 1. 导出一张表 mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)2. 导出多张表 mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)3. 导出所有表 mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)4. 导出一个库 mysqldump

一千行MySQL学习笔记(十)

--// 内置函数 ------------ 数值函数abs(x) -- 绝对值 abs(-10.9) = 10format(x, d) -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46ceil(x) -- 向上取整 ceil(10.1) = 11floor(x) -- 向下取整 floor (10.1) = 10round(x) -- 四舍五入去整mod(m, n) -- m%n m mod n 求余 10%3=1pi() -- 获得圆周率po

一千行MySQL学习笔记(十一)

--// 存储函数,自定义函数 ---------- -- 新建 CREATE FUNCTION function_name (参数列表) RETURNS 返回值类型 函数体 - 函数名,应该合法的标识符,并且不应该与已有的关键字冲突. - 一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库. - 参数部分,由"参数名"和"参数类型"组成.多个参数用逗号隔开. - 函数体由多条可用的mysql

一千行MySQL学习笔记(八)

/* 触发器 */ ------------------ 触发程序是与表有关的命名数据库对象,当该表出现特定事件时,将激活该对象 监听:记录的增加.修改.删除. -- 创建触发器 CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt参数:trigger_time是触发程序的动作时间.它可以是 before 或 after,以指明触发程序是在激活它的语句之前或之后触发

一千行MySQL学习笔记(五)

/* 导入导出 */ ------------- select * into outfile 文件地址 [控制格式] from 表名; -- 导出表数据load data [local] infile 文件地址 [replace|ignore] into table 表名 [控制格式]; -- 导入数据 生成的数据默认的分隔符是制表符 local未指定,则数据文件必须在服务器上 replace 和 ignore 关键词控制对现有的唯一键记录的重复的处理 -- 控制格式 fields 控制字段格式