mysql语句

更新表====================================================
    ADD COLUMN      给表增加新列
        例子:key_middle后增加新列
            >ALTER TABLE mysql_testdb.tablename0
            >ADD COLUMN new_key char(10) NOT NULL DEFAULT 0 AFTER key_middle;
        
    CHANGE COLUMN   修改表的名称或数据类型
        例子:new_key重命名及重设类型
            >ALTER TABLE mysql_testdb.tablename0
            >CHANGE COLUMN new_key key2 char(1) NULL DEFAULT 2;
        
    ALTER COLUMN    删除或修改指定默认值
        例子:key2修改默认值
            >ALTER TABLE mysql_testdb.tablename0
            >ALTER COLUMN key2 SET DEFAULT 3;
        
    MODIFY COLUMN   修改指定列数据类型
        例子:key2修改类型
            >ALTER TABLE mysql_testdb.tablename0
            >MODIFY COLUMN key2 char(20) FIRST;
        
    DROP COLUMN     删除
        例子:删除key2列
            >ALTER TABLE mysql_testdb.tablename0
            >DROP COLUMN key2;
            
        例子:删除表
            >DROP TABLE mysql_testdb.tablename0;
        
    RENAME TO       修改表名
        例子:将tablename0改名为tablename2
            >ALTER TABLE mysql_testdb.tablename0
            >RENAME TO mysql_testdb.tablename2;
            
        例子:多表改名
            >RENAME TABLE tablename0 TO tablename2
            >test_table TO tablename3;
        
    AFTER index_key 新列放在index_key后位置
    FIRST 新列为第一行


查看表=======================================
    >SHOW TABLE tablename0;
    或
    >DESC mysql_testdb.tablename0;
    

索引=========================================
    创建索引
        通用项:
            index_col_name : col_name[(length)][ASC|DESC]
                col_name    索引列名
                length      用前多少长度创建索引(有利于减小索引文件大小)
                ASC|DESC    升序|降序(默认:升序)
                
            UNIQUE      指定为唯一索引
            index_name  索引名
            tbl_name    索引表名
            CONSTRAINT  别名
            symbol      
            PRIMARY KEY 主键
            AUTO_INCREMENT 自增
            UNIQUE      唯一索引
            FOREIGN     外键
            
        (1)方法一,用于单独创建索引
            CREATE [UNIQUE] INDEX index_name ON tbl_name (index_col_name,...)
                
            例子:根据name前三个字符创建一个升序索引
                >CREATE INDEX index_name ON mysql_testdb.tablename0(name(3) ASC);
                建立成功后,查看索引
                >SHOW INDEX FROM mysql_testdb.tablename0

        (2)方法二,用于创建新表时候创建索引
            创建该表索引
            CREATE TABLE {INDEX|KEY} [index_name] (index_col_name,...)
            创建主键索引
            CREATE TABLE [CONSTRAINT[symbol]] PRIMARY KEY (index_col_name,...)
            创建唯一索引
            CREATE TABLE [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,...)
            创建外键
            CREATE TABLE [CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name,...)
            
            例子:id与book组成联合主键,count建立索引
                >CREATE TABLE tablename4 
                >(
                 >id int NOT NULL AUTO_INCREMENT  
                 >name char(20) NOT NULL
                 >age int(3) NULL
                 >book char(50) NULL
                 >count int(5) NULL
                 >PRIMARY KEY(id, book)
                 >INDEX index_tablename4_count(count);
                >)
        
        (3)方法三,修改表的同时创建索引
            添加索引
            ALTER TABLE ADD {INDEX|KEY} [index_name] (index_col_name,...)
            添加主键
            ALTER TABLE ADD [CONSTRAINT[symbol]] PRIMARY KEY (index_col_name,...)
            添加唯一索引
            ALTER TABLE ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,...)
            添加外键
            ALTER TABLE ADD [CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name,...)
            
            例子:name添加非唯一索引
                >ALTER TABLE tablename4
                >ADD INDEX index_tablename4_name(name);
            
    查看索引:
        SHOW {INDEX|INDEXS|KEY} {FROM|IN} tablename [{FROM|IN} db_name] [WHERE expr]

    删除索引:
        DROP INDEX index_name on tablename
        ALTER TABLE DROP {INDEX|PRIMARY KEY|FOREIGN KEY}
        
查询:
    SELECT [ALL|DISINCT|DISTINCTROW] select_expr [,select_expr,...]
    FROM tablename 
    [WHILE where_condition]
    [GROUP BY {col_name|expr|position} [ASC|DESC],...[WITH ROLLUP]
    [HAVING where_condition]
    [ORDER BY {col_name|expr|position} [ASC|DESC]]
    [LIMIT {[offset,] row_count|row_count OFFSET offset}]
    
        SELECT      要返回的列          ALL|DISINCT|DISTINC TROW     是否返回结果集中的重复行
        FROM        从中检索的数据表    
        WHERE       行级过滤
        GROUP BY    分组说明
        HAVING      组级过滤
        ORDER BY    输出排序顺序
        LIMIT       要检索的行数
        
        select_expr 指定查询内容(可表示一个常量/变量/表达式)
    
    单表查询:
        例子:(1)查询tablename4中name,age,book信息
                    >SELECT name,age,book FROM mysql_testdb.tablename4;
            
              (2)查询全部信息
                    >SELECT * FROM mysql_testdb.tablename4
                    
              (3)查询结果,判断并取别名
                    >SELECT name,
                    >CASE WHERE sex='M' THIN '男'
                    >ELSE '女'
                    >END AS 性别
                    >FROM mysql_testdb.tablename4;
                    
              (4)将查询结果计算
                    >SELECT name,sex,age+100 FROM mysql_testdb.tablename4;
                
    多表查询:
        交叉连接(笛卡儿积)
            例子:得到tb1和tb2的数据
                    >SELECT * FROM tb1 CROSS JOIN tb2 
                    或者 >SELECT * FROM tb1,tb2)
                    
        内链接
            SELECT select_expr FROM tb1 INNER JOIN tb2 ON conditions;
            
            conditions      [tb1.]col_name [运算符] [tb2.]col_name
            例子:查询每一个学生及选课信息(等值连接)
                >SELECT * FROM tb_student INNER JOIN tb_score
                >ON tb_student.studentID = tb_score.studentID;
                
        外连接
        
            左外连接(一对多):
                LEFT OUTER JOIN 或者 LEFT JOIN
                左边表为基表,右边为参数表
                
                例子:获取表一关于表二的对应的详细数据
                    >SELECT * FROM tb1 LETF JOIN tb2 ON tb1.studentID = ON tb2.studentID
            右外连接:
                RIGHT OUTER JOIN 或者 RIGHT JOIN
                右边为基表,左边为参数表
                

    WHERE查询
        (1)比较查询(<=>)
        (2)判断查询(BETWEEN...AND 和 IN)
            >SELECT * FROM mysql_testdb.tb1 WHERE id BETWEEN 100 AND 200; 返回id为100到200间的行
            >SELECT * FROM mysql_testdb.tb1 WHERE id IN (101,156,234); 返回id为101,156,234的行
        (3)判断空值(IS)
            >SELECT * FROM mysql_testdb.tb1 WHERE age IS NULL; 返回所有age为空值的行
    
        子表查询
            例子:获取tb_student对应的tb_score成绩信息大于80分的学生
                >SELECT studentID,studentNAME 
                >FROM tb_student 
                >WHERE studentID IN (SELECT studentID FROM tb_score WHERE score>80);
                
    分组:
        GROUP BY {col_name|expr|position}[ASC|DESC],...[WITH ROLLUP]
            col_name        分组选择列,可多个列,逗号分隔
            expr            分组表达式("COUNT(*)AS '人数'")
            position        正整数,第几列意思
            WITH ROLLUP     汇总作用
            
        例子:(1)每个相同地址的男性人数,女性人数
                    >SELECT address,sex,COUNT(*)AS '人数' FROM mysql_testdb.tb1
                    >GROUP BY address,sex;
                    结果:
                    address sex 人数
                    北京    F     1
                    上海    M     4
                    武汉    F     1
                    武汉    M     2
                    
                (1)每个相同地址的男性人数,女性人数,地区总人数,总人数
                    >SELECT address,sex,COUNT(*)AS '人数' FROM mysql_testdb.tb1
                    >GROUP BY address,sex
                    >WITH ROLLUP;
                    结果:
                    address sex     人数
                    北京    F         1
                    北京    NULL      1
                    上海    M         4
                    上海    NULL      4
                    武汉    F         1
                    武汉    M         2
                    武汉    NULL      3(地区总人数)
                    NULL    NULL      8(总人数)
        
        HAVING where_condition 用于过滤组
            例子:地区中少于3人的所有客户姓名及地址
            >SELECT name,address FROM mysql_testdb.tb1
            >GROUP BY address,name
            >HAVING COUNT(*)<=3;
            结果:
            name    address
            小黄    北京
            小白    武汉
            小红    武汉
            小绿    武汉
            
    排序
        ORDER BY {col_name|expr|position}[ASC|DESC],...
        例子:
            >SELECT name,sex FROM mysql_testdb.tb1
            >ORDER BY name DESC ,address DESC;
            
        (1)空值默认最小值(2)多个列时,从左到右排序
        
    限制
        LIMIT {[offset,]count|count OFFSET offset}
        例子:从第5行开始的连续三位
            (1)
            >SELECT id,name FROM mysql_testdb.tb1 
            >ORDER BY id LIMIT 3 OFFSET 4;
            (2)
            >SELECT id,name FROM mysql_testdb.tb1 
            >ORDER BY id LIMIT 4,3;
            
        

  

原文地址:https://www.cnblogs.com/7134g/p/11516797.html