Mysql自学之路-高级1

2020-10-30 11:59:38 浏览数 (1)

图丨pexels

作者: Linux超

原文链接:http://cn.hk.uy/xBV

代码语言:javascript复制
1.CREATE DATABASE 创建数据库
 
2.CREATE TABLE 创建数据表
 
3.INSERT INTO SELECT 把一个表中的数据拷贝到另一个表中
 
4.LIMIT 返回记录行
 
5.BETWEEN AND 操作符
 
6.AS 对表,列起别名
 
7.JOIN 用于连接两个表或者多个表行
 
  1.INNER JOIN :如果表中至少有一个匹配,则返回行
 
  2.LEFT JOIN:即使右表中没有匹配,也从左表返回所有行
 
  3.RIGHT JOIN:即使左表中没有匹配,也从右表返回所有行<br>    <br>    4.FULL JOIN:FULL OUTER JOIN 关键字返回左表和右表中所有的行。如果左表中的行在右表中没有匹配或者右表中的行在左表中没有匹配,也会列出这些行<br>
8.UNION 连接两个或多个SELECT 语句结果集

实操:

1.CREATE DATABASE 建库

代码语言:javascript复制
CREATE DATABASE BOKEYUAN;-- 建立一个名字为BOKEYUAN的数据库

2.CREATE TABLE 建表

代码语言:javascript复制
1 USE BOKEYUAN;-- 使用新建的数据库
2 CREATE TABLE MYTABLE -- 建立一个名字为MYTABLE的表
3 (
4 ID INT(4) PRIMARY KEY COMMENT '序号-唯一键' , 
5 NAME VARCHAR(255) NOT NULL COMMENT '网站名称',
6 URL VARCHAR(255) UNIQUE COMMENT '网址',
7 ALEXA INT(5) COMMENT '访问量',
8 COUNTRY CHAR(20) COMMENT '网站所属国家'
9 );

3.INSER INTO SELECT

说明:上面我们已经创建好了表结构,但是还没有插入数据,那么前面基础部分已经写过插入数据的SQL语句,所有这部分我们换种方法来实现插入数据,其实是拷贝其他表的数据

实例1:

假设MYTABLE表不存在,我们可以使用下面的方法来拷贝其他表的结构和数据(因为我们用到的是相同的表数据,所以我会考虑这个方法,如果你是新的表只能先建表再插入数据)

代码语言:javascript复制
1 -- 假设我们的websites 表在MYDATABASE数据库中
2 CREATE TABLE MYTABLE SELECT * FROM MYDATABASE.WEBSITES;
实例2:

我们需要表MYTABLE已经存在,那么上面这个表已经建立好了,那么我们可以利用INSERT INTO SELECT语句直接插入数据(这里也是拷贝websites中的数据)

代码语言:javascript复制
1 INSERT INTO MYTABLE SELECT * FROM MYDATABASE.WEBSITES;
实例3:

插入某一列数据

代码语言:javascript复制
-- 只插入某一列数据

INSERT INTO MYTABLE(NAME) 
SELECT NAME FROM MYDATABASE.WEBSITES;

4.LIMIT

说明:返回记录行,上面的SQL执行完后我们会生成下面的数据表

代码语言:javascript复制
# ID, NAME, URL, ALEXA, COUNTRY
'1', 'Google', 'https://www.google.cm/', '1', 'USA'
'2', '淘宝', 'https://www.taobao.com/', '13', 'CN'
'3', '菜鸟教程', 'http://www.runoob.com/', '5000', 'USA'
'4', '微博', 'http://weibo.com/', '20', 'CN'
'5', 'Facebook', 'https://www.facebook.com/', '3', 'USA'
'6', '百度', 'http://www.baidu.com', '22', 'ZG'
实例1:
代码语言:javascript复制
1 -- 获取前3行数据 2 SELECT * FROM MYTABLE LIMIT 3;

-- 获取3,4,5行数据
SELECT * FROM MYTABLE LIMIT 2,3;

5.BETWEEN AND

说明:配合WHERE使用的查询条件语句,下面是3种实现获取1到3行数据的方法,但是总的来说实例1比较方便,有逻辑性,且简单易于理解

实例1:
代码语言:javascript复制
1 -- 获取1到3行的数据
2 SELECT * FROM MYTABLE WHERE ID BETWEEN 1 AND 3;
实例2:
代码语言:javascript复制
1 -- 获取1到3行数据还可以用WHERE IN 来实现
2 SELECT * FROM MYTABLE WHERE ID IN (1,2,3);
实例3:
代码语言:javascript复制
1 -- 获取1到3行数据另一种实现
2 SELECT * FROM MYTABLE WHERE ID < 4;

6.AS 操作符

说明:给列,表起别名

实例1:
代码语言:javascript复制
1 -- 对列起别名
2 SELECT NAME  AS '名字', URL AS '网址' FROM MYTABLE;
实例2:
代码语言:javascript复制
1 -- 合并2个列,起别名 需要CONCAT关键字
2 SELECT NAME AS '名字', CONCAT(URL,COUNTRY) AS '网站国家' FROM MYTABLE;
实例3:
代码语言:javascript复制
1 -- 对表起别名,可以用别名来访问字段元素
SELECT M.ID,M.NAME,M.COUNTRY FROOM MYTABLE AS M;

7.JOIN

说明:连接两个表,分左连接,右连接和全连接,这里我们还需要另一个表,假设表为ACCESS_LOG,结构如下:

代码语言:javascript复制
# aid, site_id, count, date
'1', '1', '45', '2016-05-10'
'2', '3', '100', '2016-05-13'
'3', '1', '230', '2016-05-14'
'4', '2', '10', '2016-05-14'
'5', '5', '205', '2016-05-14'
'6', '4', '13', '2016-05-15'
'7', '3', '220', '2016-05-15'
'8', '5', '545', '2016-05-16'
'9', '3', '201', '2016-05-17'
实例1:
代码语言:javascript复制
-- INNER JOIN 这里我们把MYTABLE看作左表ACCESS_LOG为右表,下面的sql语句会返回满足条件的行,可以想象成集合中两个集合的交集
1 SELECT M.*,A.SITE_ID FROM MYTABLE AS M
2 INNER JOIN ACCESS_LOG AS A
3 ON M.ID = A.SITE_ID
4 ORDER BY M.ID;
实例2:
代码语言:javascript复制
1 -- 左连接,会返回所有左表的行,如果没有匹配也会返回
2 SELECT M.* FROM MYTABLE AS M
3 LEFT JOIN ACCESS_LOG AS A
4 ON M.ID = A.SITE_ID
5 ORDER BY M.ID;
实例3:
代码语言:javascript复制
1 -- 右连接,返回满足条件的所有右表的行
2 SELECT *  FROM MYTABLE AS M
3 RIGHT JOIN ACCESS_LOG AS A
4 ON M.ID = A.SITE_ID
5 ORDER BY A.SITE_ID;
实例4:
代码语言:javascript复制
1 --全连接
2 SELECT M.name, A.count, A.date
3 FROM MYTABLE AS M
4 FULL OUTER JOIN access_log
5 ON M.id=A.site_id
6 ORDER BY A.count DESC; 

8.UNION

说明:操作符用于合并两个或多个 SELECT 语句的结果集。注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

假设存在表MYSOFTW

代码语言:javascript复制
# id, soft_name, url, country
'1', 'QQ APP', 'http://im.qq.com/', 'CN'
'2', '微博 APP', 'http://weibo.com/', 'CN'
'3', '淘宝 APP', 'https://www.taobao.com/', 'CN'
实例1:
代码语言:javascript复制
1 -- 筛选全部的国家,不包括重复的数据
2 SELECT M.COUNTRY FROM MYTABLE AS M
3 UNION
4 SELECT W.COUNTRY FROM MYSOFTW AS W;
实例2:
代码语言:javascript复制
-- 查询国家为“cn”的所有网站和软件
SELECT M.URL ,W.COUNTRY FROM MYTABLE AS W
WHERE M.COUNTRY = 'CN'
UNION
SELECT S.APP_NAME,A.COUNTRY FROM MYSOFTW AS S
WHERE S.COUNTRY = 'CN';

总结:今天的内容有点多,但是感觉还是挺简单的,俗话说孰能生巧,多做多写多练,前面所有的SQL语句都比较简单化,因为没有什么实际意义,只是为了学习,工作当中的SQL语句都比较复杂,一个复杂的SQL语句都是简单的几个语句结合在一起的,只要用心梳理思路都不在话下。后面还有一些内容,学完再分享!如果有错误的地方留言指出, 加油!YES I CAN!

- END -

往期推荐

MySql 学习之路-聚合函数

(建议收藏)Java基础知识笔记(详细)

主要是快乐,累不累无所谓

一个改进的数学学习工具

研究生浑浑噩噩的一天

java 小知识(比较器排序)

作者:BossXiang,可爱且懂得生活的研究生一枚(码农一枚)。

"一起学习、成长、温情的热爱生活。"

私人微信|

CSDN|知乎|github|掘金:五角钱的程序员

关注福利

关注公众号,后台回复【电子书】

几百本常用技术类电子书籍

五角钱的程序员

希望这篇文章可以帮到你~

欢迎大家点个在看,分享至朋友圈

你我都成为光发热之人,在看在看在看~(疯狂暗示!)

0 人点赞