简单的说询问

单表查询、多表查询和子查询,单表

查询语句类型: 
  轻松查询 
  多表查询 
  子查询(嵌套查询) 

查询语法:

  SELECT  field_name     :field_name为字段名,接纳要询问的列
    FROM 
table_name    :database_name为数据库名,选择要询问的数据表
  [ WHERE  condition ]     : condition
为查询条件,只有满意where前面条件,才将相应就结果输出
  [ DISTINT ]    :过滤掉重复的行
  [ ORDER BY filed_name  [ASC|DESC]  ]
:filed_name为字段名, 以钦赐的列排序, ASC 升序(暗许),DESC降序
  [ HAVING condition ]     :  condition 为查询条件, having
只好和group by 一齐使用,用于对分组结果过滤
  [ LIMIT  [offset,]Count ]     : [offset,]Count     
从第offset起先显得(注意第2行为0),显示count个

 

总结询问

1.SELECT * FROM tb_name;      * 代表所有列,如果只输出指定字段,则把“* ” 代替为指定字段名
  查询tb_book表中的所有数据:select * from tb_book ;

   

2. SELECT field1,field2 FROM tb_name;     只输出指定字段称为 投影

  只查询tb_book表中id和 books 的字段: select id,books from tb_book ;

    

3.SELECT  * FROM tb_name WHERE 条件;   只输出符合条件的行称为 选择

    查看tb_book表中sort列的值是基础类的记录: select * from tb_book where  sort='基础类' ;

DISTINCT 相同的值只显示一次(过滤掉重复的行)

查询tb_book表中sort字段有几种类型:  select distinct sort from tb_book ;(注意用distinct 过滤掉重复的行)

4503.com 1

  不加distinct的结果如下:

4503.com 2

 

WHERE子句:前边跟布尔关系发挥式 

 SELECT * FROM tb_name WHERE 条件
    比较运算符:
      1.   =、>、>=、<=、<
数值比较不加引号,字符串相比加引号 
      
例如: select * from tb_book where  sort='基础类' ;   查看tb_book表中sort列的值是基础类的记录:

``

    2.  BETWEEN 值1 AND 值2 :在值1和值2(包括值1和值2) 之间则匹配      查询出tb_book表中id列的值在20~30中间的记录:select * from tb_book where id between 20 and 30  ;

3. LIKE ‘’      `` %: 匹配任意长度任意字符``        _:匹配任意单个字符``    4. REGEXP, RLIKE 支持正则表达式``    5. IN ("value1" ,"value2"……) 在列表中的任意一个,则匹配``    6. IS NULL       判断是否为空,为空则匹配``    7. IS NOT NULL     判断是否不为空,不为空则匹配

   逻辑运算符: 
    一. AND    同时满足全体规范
    二. OLAND      满意任意1个原则
    3. NOT    不满意钦命条件,则相配

ORDER BY field_name {ASC|DESC}     : 查询结果排序(ASC升序,DESC降序)
,默以为ASC
    语法: select 列名 from 表名  order by 以丰盛列排序  [ASC|DESC]

 

字段外号:AS 
select name as student_name from student;
展现时显得为student_name不是name

 

LIMIT子句:
LIMIT [offset,]Count     
从第offset发轫展现(注意第一行为0),显示count个

聚合:
SUM(), 求有些字段值的总和 
MIN(),求某些字段值的最小值
MAX(), 求有个别字段值的最大值
AVG(), 求某些字段值的平均值
COUNT() 重返所选列中国和欧洲NULL值的行的多少

GROUP BY: 分组 
HAVING 条件(having 只好和group by 一同行使,用于对分组结果过滤)

 

推行次序如图所示

4503.com 3

 

多表查询:

连接:
    交叉连接(笛卡尔乘积)::用一个表中的每一行与另一个表中的每一行相连接
    自然连接(内连接):将两种表中相应字段的值逐一比较,只列出那些等值关系的行
    外连接:
        左外连接:select 字段名 from 表名1  LEFT JOIN  表名2  ON 表名1.字段名= 表名2.字段名       
        返回除内连接的数据外,还包括左表中不符合条件的数据,(也就是说左外连接包括左表的所有数据)并在右表的相应列添加空
        右外连接: select 字段名 from 表名1  RIGHT JOIN  表名2  ON 表名1.字段名= 表名2.字段名
         返回除内连接的数据外,还包括右表中不符合条件的数据,(也就是说右外连接包括右表的所有数据)并在左表的相应列添加空

   

自连接(表必须使用别名): 

子查询: 

    在外边壹层的查询中选择在那之中1层查询发生的结果,当境遇多层查询时,mysql从最内层的询问初始,然后从它早先向外发展移动到外围(主)查询,在那些历程中各种查询爆发的结果集都被赋给包围它的父查询

一.相比较操作中使用子查询:子查询只可以回去单个值; 

  语法: select  列名  from 表名 where  字段名  比较运算符 
(子查询)  
      相比较运算符包罗 =,!=,>,>=,<,<=。
      注意:用”()”
括住子查询,唯有子查询的结果只可以回到一个值,相比运算符才适用
     

贰.IN()中使用子查询:假若一个子查询重临结果有四个,这时相比较运算符就不能够不用关键字IN取代

   语法: select  列名  from 表名 where  字段名  in (子查询)
        注意:用”()” 括住子查询,子查询的结果能够有多个    

   
三.带关键字EXISTS的子查询:
使用首要字exists时,内查询语句不回去查询的记录,而是重临三个真假值,要是内查询语句询问到满足条件的笔录,就回来三个真值(True),不然 
   
 将赶回三个假值(false)。当再次来到的值为true时,外查询语句将拓展查询,当重返的值为false时,外查询语句就不开始展览询问或询问不出任何笔录。

    语法:  select  列名  from 表名  where exists  (子查询) 
        注意:用”()” 括住子查询, NOT EXISTS 刚好与EXISTS 相反.

四.带第3字ANY的子查询:any
表示满意在那之中大肆3个规则。使用首要字any时,只要满意内查询语句重临的结果中的肆意七个,就可以通过该标准试行外查询 
     select  列名  from 表名 where  字段名  相比较运算符 any
(子查询)

伍..带主要字ALL的子查询:all表示满足全体规则。使用主要字all时,只有满足内查询语句重临的全部结果,才足以实行外查询 
     select  列名  from 表名 where  字段名  相比运算符 all 
(子查询)

 

一道查询:联合查询结果是将多少个select 语句的查询结果合并到一齐,

  关键字UNION:将具备的询问结果合并到3头 ,然后去除一样的记录
  关键字UNION ALL:只是简短将结果和并到一齐

(select 一)   UNION (select  2); 将八个查询结果合并起来

视图: 存款和储蓄下来的SELECT语句;(在MySQL中用处十分小,跟安全有关时有意义) 
传说基表的询问结果;

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]  

展现创制某些表、视图、数据库等用了何等语句

SELECT CREATE {DATABASE | TABLE | VIEW} NAME    

广义查询: 

DML: 
DELETE 
INSERT INTO 
UPDATE

INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, val2, ...),...]
INSERT INTO tb_name SET col1= ,col2= ,....
INSERT INTO tb_name (col1,col2...) SELECT ....

字符型:单引号
数值型:不需要引号
日期时间型:
空值:NULL, ''

REPLACE INTO 与INSERT类似

DELETE: 
    DELETE FROM tb_name WHERE condition;

TRUNCATE tb_name: 清空表,并重置AUTOINCREMENT计数器;

UPDATE tb_name SET col1=..., col2=... WHERE 

原文来自 http://www.cnblogs.com/xiaonengsho/p/8567937.html 

查询语句类型:
简单询问 多表查询 子查询(嵌套查询) 查询语法: SELECT 田野(field)_name
:field_name为字段名,…

SELECT CREATE {DATABASE | TABLE | VIEW} NAME    

    语法:  select  列名  from 表名  where exists  (子查询) 
        注意:用”()” 括住子查询, NOT EXISTS 刚好与EXISTS 相反.

子查询: 

 

一.比较操作中使用子查询:子查询只可以回到单个值; 

    FROM 
table_name    :database_name为数据库名,选拔要查询的数据表
  [ WHERE  condition ]     : condition
为查询条件,唯有满意where前面条件,才将相应就结果输出
      
  [ ORDER BY filed_name  [ASC|DESC]  ]
:filed_name为字段名, 以钦命的列排序, ASC 升序(暗许),DESC降序
  [ HAVING condition ]     :  condition 为查询条件, having 只好和group by
一齐行使,用于对分组结果过滤
  [ LIMIT  [offset,]Count ]     : [offset,]Count     
从第offset行开始浮现(注意第一行为0),突显count行

4503.com 1

  语法: select  列名  from 表名 where  字段名  相比运算符 
(子查询)  
      相比运算符包罗 =,!=,>,>=,<,<=。
      注意:用”()”
括住子查询,唯有子查询的结果不得不回去二个值,相比较运算符才适用
     

REPLACE INTO 与INSERT类似

   逻辑运算符: 
    一. AND    同时满意全体规则
    二. OOdyssey      满意大肆二个规格
    3. NOT    不满意钦点条件,则相称

 SELECT * FROM tb_name WHERE 条件
    比较运算符:
      1.   =、>、>=、<=、<
数值相比不加引号,字符串相比加引号 
      
例如: select * from tb_book where  sort='基础类' ;   查看tb_book表中sort列的值是基础类的记录:

多表查询:

 

 

  关键字UNION:将装有的查询结果合并到一头 ,然后去除一样的笔录
  关键字UNION ALL:只是轻巧将结果和并到一同

ORDER BY field_name {ASC|DESC}     : 查询结果排序(ASC升序,DESC降序)
,默以为ASC
    语法: select 列名 from 表名  order by 以十三分列排序  [ASC|DESC]

  SELECT 
       [ DISTINT ]       :过滤掉重复的行
       field_name     :field_name为字段名,选择要询问的列

   
3.带关键字EXISTS的子查询:
使用重要字exists时,内查询语句不回去查询的记录,而是重回一个真假值,借使内查询语句询问到满意条件的笔录,就回去二个真值(True),不然 
   
 将赶回2个假值(false)。当重返的值为true时,外查询语句将进行查询,当再次来到的值为false时,外查询语句就不开始展览询问或询问不出任何记录。

DELETE: 
    DELETE FROM tb_name WHERE condition;

TRUNCATE tb_name: 清空表,并重置AUTOINCREMENT计数器;

UPDATE tb_name SET col1=..., col2=... WHERE 

原文来自 http://www.cnblogs.com/xiaonengsho/p/8567937.html 

3. LIKE ‘’      `` %: 匹配任意长度任意字符``        _:匹配任意单个字符``    4. REGEXP, RLIKE 支持正则表达式``    5. IN ("value1" ,"value2"……) 在列表中的任意一个,则匹配``    6. IS NULL       判断是否为空,为空则匹配``    7. IS NOT NULL     判断是否不为空,不为空则匹配

实行次序如图所示

4503.com 3

DML: 
DELETE 
INSERT INTO 
UPDATE

GROUP BY: 分组 
HAVING 条件(having 只好和group by 一同利用,用于对分组结果过滤)

广义查询: 

INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, val2, ...),...]
INSERT INTO tb_name SET col1= ,col2= ,....
INSERT INTO tb_name (col1,col2...) SELECT ....

字符型:单引号
数值型:不需要引号
日期时间型:
空值:NULL, ''

    2.  BETWEEN 值1 AND 值2 :在值1和值2(包括值1和值2) 之间则匹配      查询出tb_book表中id列的值在20~30中间的记录:select * from tb_book where id between 20 and 30  ;