SQL - 语句

SQL常用的一些语句和命令


  • sql常用命令

    查看mysql数据库中的所有数据库:show databases;
    
    切换、选择、使用数据库:use + database_name;
    
    查看数据库下的表结构:desc + table_name;
    
    创建数据库:create database + database_name
    删除数据库:drop database database_name;
               drop database if exists database_name;
    
    创建表格:create table + table_name(
                column + datatype + 
                auto_increment 自增
                not null    不为空
                unique     该列中元素唯一,不重复
                check      列中元素的约束条件,check(id>0)
                default    给列中元素设置默认值
             );        
    删除表:drop table + tabel_name
    
    示例:
        column1 integer not null,
        column2 char(11) default=2
        column3 varchar(20) not null default 'haha'
        column4 bit default 1
        column5 datetime not null
        column6 tinyint not null
        column7 longlob
        column8 float
        # 定义主键
        column9 integer primary key auto_increment
        column_name integer auto_increment
        primary key(column_name)
        # 定义外键
        column1 int foreign key references other_table(id)
    
  • alter(修改)、select(查询)、update(修改)、delete(删除)、insert into(添加)

    alter 修改的是表格的列,可以添加删除列,以及改变列的属性;
    
    select 查询的是表格的内容
    
    update 修改的是表格的元素
    
    delete 删除的是表格的行
    
    insert into 给表格添加行元素
    
  • alter 的用法

    alter table table_name add/drop/modify
    

    添加:

    1.添加约束
        alter table table_name add check(id>0 and age=18 )
    2.指定添加主键
        alter table tabel_name add primary key (column_name)
    3.添加外键
        alter table tabel_name add foreign key () references othertable()
    
        alter table table_name1 add foreignkey(f_key) reference table_name2(p_key)
    
        on delete cascade on update cascade
        on delete set null on update cascade
    

    删除:

    1.撤销约束:
        alter table table_name drop constraint column_name
        alter table table_name drop check column_name
    2.删除默认值
        alter table table_name drop column_name default
    3.删除表中的列
        alter table table_name drop column column_name
    4.撤销主键
        alter table table_name drop primary key
        alter table table_name drop constraint column_name
    5.撤销外键
        alter table tabel_name drop foreign key column1
        alter table table_name drop constraint column1
    

    修改:

    1.修改默认值
        alter table table_name modify column_name default 'thanks'  
    2.修改表格中列的数据类型
        alter tabel tabel_name modify column column_name datatype
    
  • select用法

    select * from table + 条件
    

    where条件:

    column1 = value     可以使用比较运算符 where column1 = value
    and or       where 条件1 and (条件2 or 条件3)
    
    like       
    like中可以使用通配符:       
        选取name以字母'K'结尾的所有客户:where name like '%k'
        选取name包含模式'oo'的所有客户:where name like '%oo%';
        选取name不包含模式'oo'的所有客户:where name not like '%oo%'
    
        选取name 以任意字符开始,然后是'oogle'的所有客户:
            where name like '_oogle'
        选取name以G开始,然后是一个任意字符,然后是o,然后是一个任意
        字符,然后是le的所有网站:where name like 'G_o_le';
    
        # '_': 代表任意一个字符     
        #  '%' 表示一个或者多个字符
        # 还可以使用正则表达式,详情请访问[菜鸟教程](http://www.runoob.com/sql/sql-tutorial.html)
    
        选取 name 以 A 到 H 字母开头的网站:WHERE name REGEXP '^[A-H]';
        选取 name 不以 A 到 H 字母开头的网站:WHERE name REGEXP '^[^A-H]';
    
    
    in 操作符允许在 WHERE 子句中规定多个值:
    
        where column_name in (value1,vlaue2,...)
    
    between 操作符用于选取介于两个值之间的数据范围内的值,这些值可
    以是文本、数值、或者日期:
        where alexa not between 1 and 20
        where (alexa between 1 and 20) and not country in ('USA', 'IND')
        where name between 'A' and 'H';
        where date between '2016-05-10' and '2016-05-14';
    

    关键字:

    order by: 把选出的结果按照某种方式进行排序,默认为升序
              反序 可以在最后面加上desc
    
              order by column_name desc
    group by: 对选出的结果按照某种方式进行分组
    
    limit: 限制选出的行数
    
        限制选出记录的条数:
        select * from table_name limit number;
        选取前面百分之五十的记录:
        select top 50 percent * from table_name;
    

    SQL别名:创建别名是为了让列名称的可读性更强

    select column_name as alias_name from table_name;
    
    把三个列(url、alexa和 country)结合在一起,并创建一个名
    为 "site_info" 的别名:
    select name, CONCAT(url, alexa, country) AS site_info from Websites;
    
    
    select w.name, w.url, a.count, a.date 
    from Websites as w, access_log as a 
    where a.site_id=w.id and w.name="xxx";
    

    join:用于把来自两个或者多个表的行结合起来,基于这些表之间的
    共同字段

    inner join或join 取表格的并集
    
    select Websites.id, Websites.name, access_log.count, access_log.date
    from Websites
    inner join access_log
    on Websites.id=access_log.site_id;
    
    LEFT JOIN:LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
    RIGHT JOIN:RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
    FULL JOIN:并集
    
    select column_name from table1 inner join table2 on table1.column_name=table2.column_name;
    或者:
    select column_name from table1 join table2 on table1.column_name=table2.column_name;
    
    select into:
    
    从一个表复制数据,然后把数据插入到另一个新表中
    复制所有的列插入到新表中:
    select * into newtable from table;
    复制指定的列插入到新表中:
    select column_name into newtable from table;
    
    INSERT INTO SELECT:
    从一个表中复制所有的列插入到另一个已存在的表中:
    
        INSERT INTO table2 SELECT * FROM table1;
    
    复制希望的列插入到另一个已存在的表中:
    
    INSERT INTO table2(column_name) SELECT column_name FROM table1;
    
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页