您的位置:首页 > 数据库 > MySQL

mySql入门-(二)

2019-05-19 17:38 1531 查看

最近刚刚开始学习

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
关键字用于对结果集进行排序。

  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

总结

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: