• mySql入门-(二)


    最近刚刚开始学习Mysql,然而学习MySql必经的一个过程就是SQL语句,只有按照文档从头开始学习SQL语句。学习的过程是痛苦的,但是学完的成果是甘甜的。

    SQL 语法

    所有的 SQL 语句都以下列关键字之一开始:SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW,并以一个分号(;)结束。

    有一点需要特别注意:SQL不区分大小写,也就是说SELECTselectSQL语句中有相同的含义。然而,MySQL在表的名称方面并不遵循此规定。所以,如果你在使用MySQL的话,你需要在程序中严格按照它们在数据库中名字进行使用。

    SQL语句中使用*代表通配符。

    SELECT

    SELECT关键字用来从数据中查询数据。

    语法

    SELECT 查询字段 FROM 表名;
    //  在 loglists 表中查询 id,name 两个字段
    SELECT id,name FROM `loglists`;
    

    SELECT DISTINCT

    SELECT DISTINCT语句用于返回唯一不同的值。

    语法

    SELECT DISTINCT 查询字段 FROM 表名;
    //  查询 loglists 表中 content,name 全部不相同数据
    SELECT DISTINCT content,name FROM `loglists`;
    

    SELECT DISTINCT查询多个字段的话,会根据当前的这些字段中的值全部不相同的数据。在使用时需要注意的是,不要把唯一主键作为查询条件。

    WHERE

    WHERE子句用于提取那些满足指定标准的记录。

    语法

    SELECT 查询字段 FROM 表名 WHERE 查询条件;
    //  查询 loglists 表中 content为111 的数据,查询字段包括 content,name,id
    SELECT content,name,id FROM loglists WHERE content="111";
    

    AND

    第一个条件和第二个条件都成立,则AND运算符显示一条记录。

    语法

    SELECT 查询字段 FROM 表名 WHERE 条件 AND 条件;
    //  查询 loglists 表中 content="111" 并且 id<=150 的数据,查询字段包括 id,content,name
    SELECT id,content,name FROM loglists WHERE content="111" AND id<=150;
    

    如果有多个条件可以连续AND查询。

    OR

    第一个条件和第二个条件中只要有一个成立,则OR运算符显示一条记录。

    语法

    SELECT 查询字段 FROM 表名 WHERE 条件 OR 条件;
    //  查询 loglists 表中 content="111" 或 id<=150 的数据,查询字段包括 id,content,name
    SELECT id,content,name FROM loglists WHERE content="111" OR id<=150;
    

    如果有多个条件可以连续OR查询。

    ANDOR同时使用。

    //  查询 loglists 表中 content="111" 并且 id<=150 或者 name="111" 的数据,查询数据包括 id,content,name
    SELECT id,content,name FROM loglists WHERE content="111" AND id<=150 OR name="111";
    

    ORDER BY

    ORDER BY关键字用于对结果集进行排序。

    1. 先将查询值这一列排序,同为CN的排前面,同属USA的排后面。
    2. 然后在同属CN的这些多行数据中,再根据alexa值的大小排列。
    3. ORDER BY排列时,不写明ASC DESC的时候,默认是ASC

    ASC升序
    DESC降序

    语法

    SELECT 字段 FROM 表名 ORDER BY 字段 ASC|DESC;
    //  查询 loglists 包括字段 id,content,name
    //  先将 name 升序排列,把查询的数据再按照content查询分区块,按降序排序
    SELECT id,content,name FROM loglists ORDER BY name ASC,content DESC;
    

    INSERT INTO

    INSERT INTO语句用于向表中插入新记录。

    语法

    INSERT INTO 表名 (添加字段) VALUES (值);
    //  向 loglists 中添加一条数据 字段为 name,content,text 值为 "aaron","my's aaron","haha"
    INSERT INTO loglists (name,content,text) VALUES ("aaron","my's aaron","haha");
    

    下面这种也是插入一条数据带有条件查询

    //  向 loglists 中插入一条数据
    //  插入的数据为 loglists 表中 content = 123 的结构
    INSERT INTO loglists SELECT * FROM loglists WHERE content = "123";
    

    上面这种写写法需要注意:

    1. 插入表中与查到的表中的主键不能相同,一旦相同则会抛出错误
    2. 若查询表中有多条数据,则会重复添加多条数据
    3. 要求表必须存在

    UPDATE

    UPDATE语句用于更新表中的记录。

    语法

    UPDATE 表明 SET 更新数据(name="liergou") WHERE 条件;
    //  更新loglists表
    //  name="liergou",text="eroguzi",content="ok"
    //  根据 id=1 或 text="999"
    //  查找数据并更新
    UPDATE loglists SET name="liergou",text="eroguzi",content="ok" WHERE id=1 OR text="999";
    

    DELETE

    DELETE语句用于删除表中的记录。

    语法

    DELETE FROM 表名 WHERE 查询条件;
    //  删除 loglists 中 id=1 或 text="angie" 的数据
    DELETE FROM loglists WHERE id=1 OR text="angie";
    

    删除所有数据:

    DELETE FROM table_name;
    DELETE * FROM table_name;
    

    ++友情提示:在删除记录时要格外小心!因为不能重来!++

    LIMIT

    截取查询数据。

    语法

    SELECT 字段 FROM 表名 ORDER BY 查询字段 ASC LIMIT 截取位数;
    //  在 loglists 表中
    //  按id升序排列,截取1-3位
    SELECT * FROM loglists ORDER BY id ASC LIMIT 3;
    

    如果LIMIT后面只有一个数则默认为1-n之间。

    在看SQL语句的时候看到有个一TOP语句,但是在Mysql使用的时候,报错。

    Mysql中实现类似TOP语句:

    SELECT * FROM loglists ORDER BY id ASC LIMIT 1,3;
    

    LIKE

    LIKE操作符用于在WHERE子句中搜索列中的指定模式。

    语法

    SELECT 字段 FROM 表名 WHERE 搜索字段 LIKE 条件;
    //  查询 loglists 表中 text 字段
    //  text含有a字母
    //  包含所有字段
    SELECT * FROM loglists WHERE name LIKE "%a%";
    

    模糊搜索规则:

    1. '%a':以a结尾的数据
    2. 'a%':以a开头的数据
    3. '%a%':含有a的数据
    4. '_a_':三位且中间字母是a
    5. '_a':两位且结尾字母是a
    6. 'a_':两位且开头字母是a

    IN

    IN操作符允许在WHERE子句中规定多个值。

    语法

    SELECT 字段 FROM 表名 WHERE 查询字段 in 查询条件;
    //  在 loglists 查询 name 字段为 a 或 b的数据
    SELECT * FROM loglists WHERE name in ("a","b");
    

    若不使用IN操作符也是可以实现的:

    SELECT * FROM loglists WHERE name="a" OR name="b";
    

    这样的写法与上面是等价的。

    BETWEEN

    BETWEEN操作符用于选取介于两个值之间的数据范围内的值。

    语法

    SELECT 字段 from 表明 WHERE 条件字段 BETWEEN 条件1 AND 条件2;
    //  在 loglists 表中查询 id 为 9-11之间的数据
    SELECT * from loglists WHERE id BETWEEN 9 AND 11;
    

    JOIN 与 INNER JOIN

    join用于把来自两个或多个表的行结合起来。INNER JOIN1产生的结果集中,是表1和表二2的交集。

    语法

    SELECT 字段(loglists.id) FROM 表1 INNER JOIN 表2 ON 条件;
    
    //  查询 loglists 与 children 表
    //  loglists.id 与 children.cid 相同的数据
    //  查询字段为 
    //  loglists.id,
    //  loglists.name,
    //  children.age,
    //  loglists.content,
    //  loglists.text 
    SELECT 
        l.id,
        l.name,
        c.age,
        l.content,
        l.text 
    FROM
        loglists AS l
    INNER JOIN 
        children AS c
    ON 
        l.id = c.cid;
    

    LEFT JOIN

    LEFT JOIN关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为NULL

    语法

    SELECT 字段 FROM 表1 LEFT JOIN 表二 ON 条件;
    
    //  查询 loglists 与 children 表
    //  loglists.id 与 children.cid 相同的数据
    //  查询字段为 
    //  loglists.id,
    //  loglists.name,
    //  children.age,
    //  loglists.content,
    //  loglists.text 
    SELECT
    	l.id,
    	l.`name`,
    	c.age,
    	l.text,
    	l.content
    FROM
    	loglists AS l 
    LEFT JOIN
    	children AS c 
    ON
    	l.id = c.age;
    

    查询数据如下:

    id name age text content
    12 aaron 12 简介 什么都没有
    13 angie null 简介 有点东西

    RIGHT JOIN

    RIGHT JOIN关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为NULL

    语法

    SELECT 字段 FROM 表1 RIGHT JOIN 表二 ON 条件;
    
    //  查询 loglists 与 children 表
    //  loglists.id 与 children.cid 相同的数据
    //  查询字段为 
    //  loglists.id,
    //  loglists.name,
    //  children.age,
    //  loglists.content,
    //  loglists.text 
    SELECT 
    	l.id,
    	c.age,
    	l.`name`,
    	l.text,
    	l.content
    FROM
    	loglists AS l
    RIGHT JOIN
    	children AS c
    ON
    	l.id=c.age;
    

    查询数据如下:

    id name age text content
    12 aaron 12 简介 什么都没有
    null null 55 null null
    null null 77 null null

    总结

    简单的做了一些笔记,虽然很基础个人觉得很实用,如果哪里有错误,请在下方留言指正,我会尽快做出修改。

  • 相关阅读:
    Libev源码分析01:Libev中的监视器结构(C结构体实现继承)
    字符串处理函数
    sqrt函数实现
    Text Justification
    Minimum Path Sum
    Linux下如何查看系统启动时间和运行时间
    通过GDB重新获得进程的输出
    linux时间
    jmeter java请求:java.lang.VerifyError: Cannot inherit from final class
    面试——请带简历
  • 原文地址:https://www.cnblogs.com/aaron---blog/p/10890001.html
Copyright © 2020-2023  润新知