转自:http://blog.sina.com.cn/s/blog_a74f39a201013c3b.html

1、选择所有的记录

select * from table_name;

其中*表示表中的所有字段。

2、查询不重复的记录

用关键字distinct

select distinct  字段名  from  表名;

3、条件查询

用关键字where

select * from 表名 where 条件;

where后面的条件是一个字段的比较,可以使用=、>、<、>=、<=、!=等比较运算符;多个条件还可以使用or、and等逻辑运算。

4、排序和限制

用关键字order by  desc(降序), asc(升序),limit(排序结果显示一部分)

order by后面可以跟多个不同的排序字段,并且每个排序字段可以有不同的排序顺序。

例如:把emp表中的记录按照工资sal的高低顺序排序。

select * from emp order by sal;

select * from emp order by sal,deptno desc;(sal升序,septno降序)

先按第一个字段排序,当第一个字段相同时,按照第二个字段排序。

select······limit offset_start, row_count;

offset_start表示起始偏移量,默认值为0。 row_count表示显示的行数。

例如:select * from emp order by sal limit 1,3;

显示前3条记录,起始偏移量为1,从第二条记录开始显示。

order  by 和limit 通常一起使用来控制记录的分页显示。

5、聚合

很多情况下,用户需要一些汇总操作,例如统计整个公司的人数或者每个部门的人数。

语法:

select 字段1,字段2.。。函数名 from 表名  where where_condition1  group by  字段11,字段12  with rollup  having  where_condition2;

函数名表示要做的聚合操作,就是聚合函数,常用的有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。

group by 关键字表示要进行分类聚合的字段、

having 关键字表示对分类后的结果在进行条件的过滤。

having和where的区别是having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们可以用where先进行过滤,这样结果集变小了,将对聚合的效率大大的提高,最后在根据逻辑看是否用having进行再过滤。

select sum(sal), max(sal), min(sal) from emp;

6、表连接

当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。

从大类上分,表连接分为内连接和外连接,它们之间的最主要的区别是内连接仅选出两张表中互相匹配的记录,而外连接会会选出其他不匹配的记录。我们最常用的是内连接。

例如:查询出所有雇员的名字和所在的部门名称,因为雇员名称和部门分别放在表emp和表dept中,因此,需要使用表连接来进行查询。

select ename, deptname from emp, dept where emp.deptno=dept.deptno;

(ename是表emp中的字段,deptname是dept表中的字段)

外连接又分为左链接和右连接(关键字left join和 right join)

左连接:包含所有的左边表中的记录甚至是右边表中没有和他匹配的记录。

右连接:包含所有的右边表中的记录甚至是左边表中没有和他匹配的记录。

例如:select ename, deptname from emp left join dept on emp.deptno=dept.deptno;

select ename, deptname from dept right join emp on emp.deptno=dept.deptno;

ename是表emp中的字段,deptname是dept表中的字段。 就是包含表emp中的所有记录。     以上两条语句等价。

7、字查询

在某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要用到子查询。用于子查询的关键字主要包括in、not in、=、!=、exists、not exists等。

select * from emp where deptno in (select deptno from dept);

(表示的意思就是就表emp中的所有记录,除去dept表对应的部门不存在的删掉。)

在某些情况下,子查询可以转化成表连接。例如,上面的语句可以写成:

select emp.* from emp, dept where emp.deptno=dept.deptno;

8、记录联合

我们经常会碰到这样的应用,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来。这个时候,就需要用到union和 union all关键字来实现这样的功能。union和union all的区别:union all 是把结果集合并在一起,而union是将union all后的结果进行一次distict,去除重复记录。

select * from table1  union| union all select * from table2;

例如:

① select deptno from emp  union all select deptno from dept;

② select deptno from emp  union select deptno from dept;

①中的记录将会有重复记录,②中没有重复记录。

【转】mysql中select用法的更多相关文章

  1. (转载)mysql中limit用法

    (转载)http://hi.baidu.com/sppeivan/item/e45179375d6778c62f8ec221   mysql中limit用法 使用查询语句的时候,经常要返回前几条或者中 ...

  2. MySQL中select * for update锁表的范围

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  3. MySQL中select * for update锁表的问题

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  4. mysql进阶(四)mysql中select

    mysql中select * for update 注:  FOR UPDATE 仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效. 作用 锁定该语句所选择到的对象.防止在 ...

  5. mysql中select into 和sql中的select into 对比

    现在有张表为student,我想将这个表里面的数据复制到一个为dust的新表中去.answer 01: create table dust select * from student;//用于复制前未 ...

  6. 非空校验在oracle和mysql中的用法

    oracle判断是否为null nvl(参数1,参数2) :如果参数1为null则返回参数2,否则返回参数1 mysql判断是否为null ifnull(参数1,参数2) :如果参数1为null则返回 ...

  7. Mysql中Join用法及优化

    Join的几种类型 笛卡尔积(交叉连接) 如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录.在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者直接用f ...

  8. mysql update select 用法

    之前用SqlServer , update语句对表进行更新:update a set a.xx= (select yy from b) ; 是可以的但是在mysql中,不能直接使用set select ...

  9. Mysql中timestamp用法详解

    前言:时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的. 完整的. 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间.使用数字签名技术产生的数据, 签名的对象包括了 ...

随机推荐

  1. 找宝箱 (bfs)

    Problem Description 作为一个强迫症患者,小 Y 在走游戏里的迷宫时一定要把所有的宝箱收集齐才肯罢休.现在给你一个 N *M 的迷宫,里面有障碍.空地和宝箱,小 Y 在某个起始点,每 ...

  2. Java 代理模式和装饰者模式的区别

    装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案:代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用: 装饰模式应该为所装饰的对象增强功能:代理模式对代理的 ...

  3. Logstash学习系列之插件介绍

    Logstash插件获取方式 插件获取地址: https://github.com/logstash-plugins  在线安装: /plugin install logstash-input-jdb ...

  4. Hadoop 执行过程中出现 name node is in safe mode 问题

    解决方法: 1.进入hadoop安装根目录 如 :我的hadoop 安装在/usr/local/hadoop 执行 cd /usr/local/hadoop bin/hadoop dfsadmin - ...

  5. 程序员之---C语言细节18(一些奇怪表达式)

    主要内容:一些奇怪表达式 #include <stdio.h> #define N 10 int main() { int a = 1; int *q = &a; int p = ...

  6. MapReduce的Reduce side Join

    1. 简单介绍 reduce side  join是全部join中用时最长的一种join,可是这样的方法可以适用内连接.left外连接.right外连接.full外连接和反连接等全部的join方式.r ...

  7. iOS 基于 MVC 的项目重构总结

    关于MVC的争论 关于MVC的争论已经有非常多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你觉得的MVC的问题,一定是你自己理解的问题(资深架构师请自己主动忽略本文) ...

  8. 【Linux多线程】三个经典同步问题

    在了解了<同步与互斥的区别>之后,我们来看看几个经典的线程同步的例子.相信通过具体场景可以让我们学会分析和解决这类线程同步的问题,以便以后应用在实际的项目中. 一.生产者-消费者问题 问题 ...

  9. Datagridview CurrentRow.Index

    int index = dataGridView1.CurrentRow.Index;  //获取当前选择行引导 string str = dataGridView1.Rows[index].Cell ...

  10. 使用fiddler将网站上的css js重定向至本地文件

    使用fiddler将网站上的css js重定向至本地文件,进行在线调试 https://github.com/annnhan/ReRes 1条回复 这是一篇写给公司负责切图和调样式的前端的文章.主要适 ...