最近刚刚开始学习Mysql
,然而学习MySql
必经的一个过程就是SQL语句
,只有按照文档从头开始学习SQL
语句。学习的过程是痛苦的,可是学完的成果是甘甜的。sql
全部的 SQL 语句都如下列关键字之一开始:SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW
,并以一个分号(;
)结束。数据库
有一点须要特别注意:SQL
不区分大小写,也就是说SELECT
和select
在SQL
语句中有相同的含义。然而,MySQL
在表的名称方面并不遵循此规定。因此,若是你在使用MySQL
的话,你须要在程序中严格按照它们在数据库中名字进行使用。学习
SQL语句
中使用*
表明通配符。spa
SELECT
SELECT
关键字用来从数据中查询数据。code
语法排序
SELECT 查询字段 FROM 表名; // 在 loglists 表中查询 id,name 两个字段 SELECT id,name FROM `loglists`;
SELECT DISTINCT
SELECT DISTINCT
语句用于返回惟一不一样的值。ci
语法文档
SELECT DISTINCT 查询字段 FROM 表名; // 查询 loglists 表中 content,name 所有不相同数据 SELECT DISTINCT content,name FROM `loglists`;
若SELECT DISTINCT
查询多个字段的话,会根据当前的这些字段中的值所有不相同的数据。在使用时须要注意的是,不要把惟一主键做为查询条件。it
WHERE
WHERE
子句用于提取那些知足指定标准的记录。table
语法
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
查询。
AND
与OR
同时使用。
// 查询 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
关键字用于对结果集进行排序。
CN
的排前面,同属USA
的排后面。CN
的这些多行数据中,再根据alexa
值的大小排列。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";
上面这种写写法须要注意:
主键
不能相同,一旦相同则会抛出错误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%";
模糊搜索规则:
a
结尾的数据a
开头的数据a
的数据a
的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 |
简单的作了一些笔记,虽然很基础我的以为很实用,若是哪里有错误,请在下方留言指正,我会尽快作出修改。