博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql学习笔记
阅读量:2123 次
发布时间:2019-04-30

本文共 6383 字,大约阅读时间需要 21 分钟。

  • sql语句对大小写是不敏感的, select 和SELECT都是可以的。
  • 一些重要的sql命令
    •  SELECT - 从数据库中提取数据
    • UPDATE - 更新数据库中的数据
    • DELETE - 从数据库中删除数据
    • INSERT INTO - 向数据库中插入新数据
    • CREATE DATABASE - 创建新数据库
    • ALTER DATABASE - 修改数据库
    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)
    • DROP INDEX - 删除索引
  •  select
    • * 是用来查询所有
    • 也可以指定几个字段来查询
    • distinct 去除重复值
    • where 查询条件
      • 可能用到的运算符
        • ==
        • <>不等
        • between
        • like
        • in
      •  SELECT * FROM Websites WHERE country='CN';
    • order by 对查询结果进行排序,  也可以对多列进行排序。
  • insert into 
    • 可一条语句插入多条
      • insert into websites values('6','百度','https://www.baidu.com','5','CN’),('6','百度','https://www.baidu.com','5','CN’);
      • 注意一点就是每个值之间的逗号左右不要有空格
  • update
    •  UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';
    • 注意一定要加where子句,否则会更改所有的数据。
  • delete
    • DELETE FROM Websites WHERE name='百度' AND country='CN'; 
    • 删除所有数据
      • DELETE FROM table_name;
      • DELETE * FROM table_name;
  • select top子句
    • 说明:
      • sql server 和 access的执行是select top 
      • my sql的是用limit子句
      • oracle的是 where ROWNUM <= 5
    •  e.g.:
      • mysql : SELECT * FROM Persons LIMIT 5;
      • oracle: SELECT * FROM Persons WHERE ROWNUM <=5;
  •  like
    • 格式:SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
    • like 后面是接通配符的。
      • 其中%可以表示多个字符
      • _ 表示一个字符
    • like前面可以接not ,这样则选取不在通配符表示范围以内的字符
  • 通配符
    • %替代0个或多个字符
    • _ 替代一个字符
    • [charlist] 字符列表中的任何单一字符
      • MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
      • 实例
        • SELECT * FROM Websites WHERE name REGEXP '^[GFs]’; 选取 name 以 "G"、"F" 或 "s" 开始的所有网站
        • SELECT * FROM Websites WHERE name REGEXP '^[A-H]’;  选取 name 以 A 到 H 字母开头的网站
    • [^charlist] 或 [!charlist]  不在字符列表中的任何单一字符
      • SELECT * FROM Websites WHERE name REGEXP '^[^A-H]’;  选取 name 不以 A 到 H 字母开头的网站
  • in 操作符
    • 语法:
      • SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
    • 实例
      • SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
  • between
    • 语法:
      • SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
    • 实例
      • SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20;
      • SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20;
  • 别名
    • 说明:查询的时候可以为表象和字段名取一个别名
    • 使用:在表名和字段名后加as aliasName
    • 实例:
      • SELECT name AS n, country AS c FROM Websites;
      • 把三个字段结合在一起,并创建一个别名
        • SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites;
  • Join
  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行
      
  •  inner join
    • inner join 与join相同
    • 图例
    • 语法:
      •  SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;
      • SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name;
    • 示例
      • SELECT , access_log.count, access_log.date FROM Websites INNER JOIN access_log ON Websites.id=access_log.site_id ORDER BY access_log.count;
  •  left join
    • 说明:LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
    • 语法:
      • SELECT column_name(s)
        FROM table1
        LEFT JOIN table2
        ON table1.column_name=table2.column_name;
      • SELECT column_name(s)
        FROM table1
        LEFT OUTER JOIN table2
        ON table1.column_name=table2.column_name;
    • 图示
    • 示例:
      • SELECT , access_log.count, access_log.date
        FROM Websites
        LEFT JOIN access_log
        ON Websites.id=access_log.site_id
        ORDER BY access_log.count DESC;
  • right join
    • 说明:RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
    • 语法 
      • SELECT column_name(s)
        FROM table1
        RIGHT JOIN table2
        ON table1.column_name=table2.column_name;
      • SELECT column_name(s)
        FROM table1
        RIGHT OUTER JOIN table2
        ON table1.column_name=table2.column_name;
    • 图示:
    • 示例:
      • SELECT Websites.name, access_log.count, access_log.dateFROM access_logRIGHT JOIN WebsitesON access_log.site_id=Websites.idORDER BY access_log.count DESC;
  • full outer join
    • 说明 
      • FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
        FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
    • 语法:
      • SELECT column_name(s)
        FROM table1
        FULL OUTER JOIN table2
        ON table1.column_name=table2.column_name;
    • 图示:
    • 示例
      • SELECT , access_log.count, access_log.date
        FROM Websites
        FULL OUTER JOIN access_log
        ON Websites.id=access_log.site_id
        ORDER BY access_log.count DESC;
  •  union操作符
    • 说明 :用来合并两个或多个 SELECT 语句的结果。
    • 语法:
      • SELECT column_name(s) FROM table1
        UNION
        SELECT column_name(s) FROM table2;
      • 注意:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
      • SELECT column_name(s) FROM table1
        UNION ALL
        SELECT column_name(s) FROM table2;
    • 示例:
      • 从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值)
      • SELECT country FROM Websites
        UNION
        SELECT country FROM apps
        ORDER BY country;
  • select into 
    • MySQL 数据库不支持 SELECT ... INTO 语句,但支持  。
    • 当然你可以使用以下语句来拷贝表结构及数据:
      CREATE TABLE 新表 SELECT * FROM 旧表
    •  语法:
      • SELECT *
        INTO newtable [IN externaldb]
        FROM table1;
      • 或者只复制希望的列插入新表中
      • SELECT column_name(s)
        INTO newtable [IN externaldb]
        FROM table1;
  •  Create Table
    • CREATE TABLE Persons
    • (
    • PersonID int,
    • LastName varchar(255),
    • FirstName varchar(255),
    • Address varchar(255),
    • City varchar(255)
    • );
  • SQL约束
    • 说明:用来给字段建立约束,如果违反,则不可以操作。
    • 语法:
      • CREATE TABLE table_name(
      • column_name1 data_type(sizeconstraint_name,
      • column_name2 data_type(sizeconstraint_name,
      • column_name3 data_type(sizeconstraint_name,
      • ....);
    • 约束规则
      • not null
      • unique
      • primary key 
      • foreign key
      • check  保证列中的值符合指定条件
      • default  给定默认值 
    • primary key 
      • 特性:
        • 唯一值
        • 不可为null
        • 一个表只能有一个
      • 用处
        • create table
        • alter table person add primary key id
      • 撤销
        • alter table person drop primary key
    • foreign key
      • 外表中的关键字
      • 添加关键字e.g.
        • CREATE TABLE Orders(
        • O_Id int NOT NULL,
        • OrderNo int NOT NULL,
        • P_Id int,
        • PRIMARY KEY (O_Id),
        • FOREIGN KEY (P_Id) REFERENCES Persons(P_Id))
      • 撤销关键字e.g.
        • ALTER TABLE Orders
        • DROP FOREIGN KEY fk_PerOrders
    • check
      • 说明:
        • 可以约束一个字段
        • 也可以约束一个表
      • 示例1:
        • CREATE TABLE Persons(
        • P_Id int NOT NULL,
        • LastName varchar(255) NOT NULL,
        • FirstName varchar(255),
        • Address varchar(255),
        • City varchar(255),
        • CHECK (P_Id>0))
      • 示例2:
        • ALTER TABLE Persons
        • DROP CHECK chk_Person
  • 索引
    • 使查询更加快速
    • 语法: create index PIndex on tablename(字段1,字段2);
  • Drop
    • 可以执行多种删除操作
      • table
      • index
      • database
    • 如果只是删除表中的数据而不删除表
      • truncate table name
  • alter
    • alter table name 
      • add colume
      • drop colume
  •  auto-increament
    • 用法:
      • create table Persons(id int auto_increment);
      • alter table Person auto_increament = 100;
  • 视图 Views
    • 说明:是基于SQL语句的结果集的可视化的表。可以当表来使用。
    • 语法:
      • CREATE VIEW view_name AS
      • SELECT column_name(s)
      • FROM table_name
      • WHERE condition
    • 注意:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
    • 撤销视图:drop view viewName
  • date
    • 数据类型
  • null
    • is null
    • is not null
    • 以上两个会在select查询判断中使用到。
  • null函数
    • isnull()
    • nvl()
    • ifnull()
    • coalesce()
  • MySql中的数据类型
    • Text类型
    • Number数据类型
    • Date类型
  •  函数
    • 集合
      • AVG() - 返回平均值
      • COUNT() - 返回行数
      • FIRST() - 返回第一个记录的值
      • LAST() - 返回最后一个记录的值
      • MAX() - 返回最大值
      • MIN() - 返回最小值
      • SUM() - 返回总和
    • 标量
      • UCASE() - 将某个字段转换为大写
      • LCASE() - 将某个字段转换为小写
      • MID() - 从某个文本字段提取字符
      • LEN() - 返回某个文本字段的长度
      • ROUND() - 对某个数值字段进行指定小数位数的四舍五入
      • NOW() - 返回当前的系统日期和时间
      • FORMAT() - 格式化某个字段的显示方式

转载地址:http://kldrf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-43》94.二叉树的中序遍历
查看>>
Leetcode C++ 《第175场周赛-1 》5332.检查整数及其两倍数是否存在
查看>>
Leetcode C++ 《第175场周赛-2 》5333.制造字母异位词的最小步骤数
查看>>
Leetcode C++ 《第175场周赛-3》1348. 推文计数
查看>>
Leetcode C++《热题 Hot 100-44》102.二叉树的层次遍历
查看>>
Leetcode C++《热题 Hot 100-45》338.比特位计数
查看>>
读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
查看>>
Leetcode C++《热题 Hot 100-46》739.每日温度
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>