马哥学习笔记十五——MySQL进阶之SQL语句

数据库:

  create database|schema [if not exists] db_name [character set =] [collate =];

  alter database

  drop {database | schema} [if exists] db_name;

表:

  1、直接定义一张空表;
  2、从其它表中查询出数据,并以之创建新表;
  3、以其它表为模板创建一个空表;

  CREATE TABLE [IF NOT EXISTS] tb_name (col_name col_defination, constraint )

  CREATE TABLE tb1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL)  ENGINE [=] engine_name;

  CREATE TABLE tb2 (id INT UNSIGNED NOT NULL AUTO_INCREMENT, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL, PRIMARY KEY(id),UNIQUE KEY(name),INDEX(age));

  单字段:  PRIMARY KEY  UNIQUE KEY

  单或多字段:  PRAMARY KEY (col,...)  UNIQUE KEY (col,...)  INDEX (col,...)

键也称作约束,可用作索引,属于特殊索引(有特殊限定):B+Tree

SHOW INDEXES FROM tb_name:显示指定表上的索引

索引创建:
  CREATE INDEX index_name ON tb_name (col,...);

  col_name [(length)] [ASC | DESC]

查询语句类型:

  简单查询

  多表查询

  子查询

SELECT field1,field2 FROM tb_name; 投影

SELECT [DISTINCT] * FROM tb_name WHERE qualification; 选择

  distinct:相同的值只显示一次

FROM子句: 要查询的关系         表、多个表、其它SELECT语句

WHERE子句:

  布尔关系表达式  =、>、>=、<=、<  

  逻辑关系:   AND   OR   NOT

  BETWEEN ... AND ...  

  LIKE ‘’   

    %: 任意长度任意字符   

    _:任意单个字符  

  REGEXP, RLIKE:支持正则表达式

  IN:离散取值

  IS NULL  

  IS NOT NULL

ORDER BY field_name {ASC|DESC}:将查询后的数据进行排序

字段别名:AS

LIMIT子句:LIMIT [offset,]Count

聚合函数:SUM(), MIN(), MAX(), AVG(), COUNT()

GROUP BY: 分组  

  HAVING qualification:对分组过滤

多表查询:
  连接:
    交叉连接:笛卡尔乘积
    自然连接:
    外连接:
      左外连接:... LEFT JOIN ... ON ...
      右外连接: ... RIGHT JOIN ... ON ...
    自连接:

子查询:  

  比较操作中使用子查询:

  子查询只能返回单个值;  

  IN(): 使用子查询;  

  在FROM中使用子查询;

联合查询:  UNION

视图: 存储下来的SELECT语句;  

  基于基表的查询结果;

  VIEW

  CREATE VIEW

  物化视图:SELECT

SHOW CREATE:显示创建过程

mysql -e 'SQL语句':在shell命令函中执行SQL语句

广义查询:

  DML:  

    DELETE  

    INSERT INTO  

    UPDATE

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

  字符型:单引号  

  数值型:不需要引号  

  日期时间型:  

  空值:NULL, ''

REPLACE INTO

DELETE:  DELETE FROM tb_name WHERE condition;

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

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

posted @ 2014-05-15 11:02  不尽长江滚滚来  阅读(407)  评论(0编辑  收藏  举报