Girls don't frown,...
SQL 笔记
  • xiele-淡墨
  • 2019-02-21
  • 默认分类


  • 选择指定列:

    select name,age from user; //选择name列和age列


    返回不重复的值:

    select distinct imgname from bk_img;


    where 条件,特殊条件:

    1.is null (空值判断)
    select * from database where name is null;


    2.between and (在 之间的值)
    select * from database where sal between 1500 and 3000; //sal列中大于1500小于3000的值,包括1500和3000


    3.In
    select * from database where sal in (5000,1500,3000) //sal列中等于5000,1500,3000的值


    4.like 模糊查询
    select * from database where emname like 'M%';
    % 表示多个字值
    M% 为通配符,正则表达式,表示的意思是模糊查询信息为 M 开头的
    %M% 表示查询包含 M 的所有内容
    %M_ 表示查询以M在倒数第二位的所有内容
    %a' //以a结尾的数据
    'a%' //以a开头的数据
    '%a%' //含有a的数据
    '_a_' //三位且中间字母是a的
    '_a' //两位且结尾字母是a的
    'a_' //两位且开头字母是a的


    5.不带比较运算符的 WHERE 子句:

    WHERE 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当 0 时转化为 false,1 转化为 true。例如:

    SELECT studentNO FROM student WHERE 0
    则会返回一个空集,因为每一行记录 WHERE 都返回 false。

    SELECT studentNO FROM student WHERE 1
    返回 student 表所有行中 studentNO 列的值。因为每一行记录 WHERE 都返回 true。


    order by 关键字排序:

    select * from database order by time desc; //按照 time 进行降序排序,desc 降序,asc升序;

    order by 多列:

    select * from database order by create_time,updata_time desc; // 多列排序


    指定多列排序的排序顺序:

    order by A,B 这个时候都是默认按升序排列
    order by A desc,B 这个时候 A 降序,B 升序排列
    order by A ,B desc 这个时候 A 升序,B 降序排列


    inert into 插入数据:

    insert into select 和select into from 的区别:

    insert into scorebak select * from socre where neza='neza' --插入一行,要求表scorebak 必须存在

    select * into scorebak from score where neza='neza' --也是插入一行,要求表scorebak 不存在


    update 语句:
    update bk_admin set username = 'test123' where username = 'test'; //修改username 等于 test 为 test123(Where语句为必须语句,否则更新整个表!!!)

    执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。

    在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。

    set sql_safe_updates=1; 表示开启该参数



    delete 语句:
    delete from bk_admin where username = 'test123'; //删除 username = test123的行

    SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。

    DROP:

    DROP test;
    删除表test,并释放空间,将test删除的一干二净。

    TRUNCATE:

    TRUNCATE test;
    删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。

    DELETE:

    1、删除指定数据

    删除表test中年龄等于30的且国家为US的数据

    DELETE FROM test WHERE age=30 AND country='US';
    2、删除整个表

    仅删除表test内的所有内容,保留表的定义,不释放空间。

    DELETE FROM test 或者 DELETE FROM test;
    DELETE * FROM test 或者 DELETE * FROM test;


    LIMIT 选择指定数量行数:

    select * from bk_img limit 10; //选择10行

    select * from bk_img limit 5,10; //第5行开始,到第10行结束



    通配符:

    % 通配符:
    SELECT * FROM Websites WHERE url LIKE
    'https%'; //以某个字符串开头的记录
    '%https%'; //包含https的记录

    _ 通配符:

    下面的 SQL 语句选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:
    SELECT * FROM Websites
    WHERE name LIKE '_oogle';
    _ 号表示一个任意字符,可以这样使用:'_o_g_le'


    [charlist]通配符(正则表达式):

    Mysql使用 REGEXP 或 NOT REGEXP 运算符来操作正则表达式

    select * from Websites where name REGEXP '^[GFS]'; //查询以G、F、s 开头的记录


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

    列的 SQL 别名语法:
    SELECT column_name AS alias_name FROM table_name;

    表的 SQL 别名语法:
    SELECT column_name(s) FROM table_name AS alias_name;


    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;

    INNER JOIN:如果表中有至少一个匹配,则返回行
    LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
    RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
    FULL OUTER JOIN:只要其中一个表中存在匹配,则返回行

    UNION 操作符:
    用于合并两个或者多个select语句的结果集,select 语句必须要有相同列和相似的数据类型,同时,每个select语句的列的顺序必须相同。

    select country from Websites
    UNION
    select country from apps
    order by country; //以上语句返回不同的值,会过滤重复的值。

    UNION ALL 操作符:

    同上UNION操作符,不同的是会返回所有的值,包括重复的值。

    select country from Websites
    UNION ALL
    select country from apps
    order by country; //以上语句返回所有的值,不会过滤重复的值。


    INSERT INTO SELECT 语句:
    从一个表复制数据,然后把数据复制到一个已经存在的表中,目标表的数据不收影响。

    insert into Websites (name, country)
    select app_name, country from apps; //复制 apps 中的 app_name 列到 Websies表中

    insert into Websites (name, country)
    select app_name, country from apps
    where id = 1; //只复制id为一的列



    CREATE语句:

    CREATE DATABASE dbname; //创建一个名字为 dbname 的数据库;

    CREATE TABLE userinfo
    (
    Id int,
    username varchar(255),
    password varchar(255),
    address varchar(255)
    ); //新建一个数据表

    CREATE TABLE 约束:

    NO NULL:不能为空 //id int NO NULL

    UNIQUE:唯一性。
    Mysql写法:
    CREATE TABLE tb2(
    id int no null,
    name varchar(255) no null,
    UNIQUE(id)
    );


    PRIMARY KEY 主键:
    每一个表都应该有主键,并且每个表只能有一个主键。

    新建表时创建主键:
    CREATE TABLE tb2
    (
    id int NOT NULL,
    username varchar(255),
    password varchar(255),
    PRIMARY KEY (id) //设置id为主键
    );

    当表已经创建时创建主键:
    ALTER TABLE tb2
    ADD PRIMARY KEY (id);

    撤销主键:
    Mysql:
    ALTER TABLE tb2
    DROP PRIMARY KEY;


    FOREIGN KEY 约束:
    外键约束。防止非法插入数据。

    新建表时设置外键:
    CREATE TABLE order
    (
    O_id int NOT NULL,
    orderno int NOT NULL,
    P_id int,
    PRIMARY KEY (O_id), // O_id 为主键键
    FOREIGN KEY (P_id) REFERENCES persons(P_id) // P_id 为 persons 表的P_id
    );

    当表已经存在时设置外键:

    ALER TABLE order
    ADD FOREIGN KEY (P_id)
    REFERENCES persons (P_id);

    撤销 FOREIGN KEY 约束:
    Mysql:
    ALTER TABLE Order
    DROP FOREIGN KEY persons;


    CHECK 约束:
    用于限制列中的值得范围。
    如果对单个列定义CHECK约束,那么该列只允许特定的值。
    表定义 ,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

    新建表时 CHECK 约束:
    CREATE TABLE user
    (
    id int NOT NULL,
    username varchar(255),
    password varchar(255),
    CHECK (username > 0) //限制 username字段 大于 0
    )

    多个列的 CHECK 约束:

    CHECK (username > 1 AND password > 0); 限制 username 字段大于1 和 password 字段大于0

    当表已经存在时 CHECK 约束:
    Mysql:
    ALTER TABLE user
    ADD CHECK (username > 0);

    撤销 CHECK 约束:
    ALTER TABLE user
    DROP CONSTRAINT username;


    DEFAULT 约束:
    用于向列中插入默认值,设置默认值。

    新建表时设置默认值:
    CREATE TABLE user
    (
    id int NOT NULL,
    username varchar(255) NOT NULL,
    password varchar(255) DEFAULT '123456' //设置 passwdord 字段的默认值为 123456
    );

    当表已经创建的时候设置默认值:
    ALTER TABLE testdb
    ALTER username SET DEFALT '123456'; //设置username字段默认值





    评论
      2019-04-15 08:20:29

      对你的服务器发起了物理攻击,拉闸。