mySql入门-(二)
source link: https://www.tuicool.com/articles/ARrANv6
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
最近刚刚开始学习 Mysql
,然而学习 MySql
必经的一个过程就是 SQL语句
,只有按照文档从头开始学习 SQL
语句。学习的过程是痛苦的,但是学完的成果是甘甜的。
SQL 语法
所有的 SQL 语句都以下列关键字之一开始: SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW
,并以一个分号( ;
)结束。
有一点需要特别注意: SQL
不区分大小写,也就是说 SELECT
和 select
在 SQL
语句中有相同的含义。然而, 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
查询。
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总结
简单的做了一些笔记,虽然很基础个人觉得很实用,如果哪里有错误,请在下方留言指正,我会尽快做出修改。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK