SQL学习笔记

heidiSQL
DBeaver

数据类型

类型大小范围(有符号)范围(无符号)用途
TINYINT1 字节(-128,127)(0,255)小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607))(0,16 777 215)大整数值
INT/INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度浮点数值
DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度浮点数值
DECIMAL对DECIMAL(M,D),如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值
类型大小范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/’838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2037 年某时YYYYMMDD HHMMSS混合日期和时间值,时间戳

一个中文3个length
1. SELECT DISTINCT country FROM Websites 用于返回唯一不同的值
2. SELECT * FROM Websites WHERE country=’CN’ SQL使用单引号来环绕文本值,大部分数据库系统也接受双引号
3. SELECT * FROM Websites WHERE alexa > 15 AND (country=’CN’ OR country=’USA’) 使用圆括号来组成复杂的表达式
4. SELECT * FROM Websites RDER BY alexa DESC ORDER BY 关键字用于对结果按照一个列或者多个列进行排序
5. SELECT * FROM Websites ORDER BY country,alexa ORDER BY 多列
6. UPDATE Websites SET alexa=’5000’, country=’USA’ WHERE name=’菜鸟教程’ WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
7. DELETE FROM Websites WHERE name=’百度’ AND country=’CN’ 删除记录
8. DELETE FROM table_name 或 DELETE * FROM table_name 在不删除表的情况下删除表中所有行,表结构、属性、索引将保持不变
9. 通配符
%用来替代0个或多个字符
_用来代替一个字符LIKE _OOGLE
[charlist]字符列中的任意一个字符WHERE name REGEXP '^[GFs]'用来选取name以G/F/S开始的所有网站
[^charlist]或者[!charlist]不在字符列中的任意单一字符WHERE name REGEXP '^[^A-H]'
10. SELECT * FROM Websites WHERE name IN (‘Google’,’菜鸟教程’) 选取name为Google或菜鸟教程的所有网站
11. SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20 选取 alexa 介于 1 和 20 之间的所有网站
12. SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND NOT country IN (‘USA’, ‘IND’) 选取alexa介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站
SELECT * FROM Websites WHERE name BETWEEN ‘A’ AND ‘H’ 选取 name 以介于 'A' 和 'H' 之间字母开始的所有网站
SELECT * FROM access_log WHERE date BETWEEN ‘2016-05-10’ AND ‘2016-05-14’ 选取 date 介于 '2016-05-10' 和 '2016-05-14' 之间的所有访问记录
13. SELECT name AS n, country AS c FROM Websites
SELECT name, CONCAT(url, ‘, ‘, alexa, ‘, ‘, country) AS site_info FROM Websites 把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名
14. SELECT w.name, w.url, a.count, a.date FROM Websites AS w, access_log AS a WHERE a.site_id=w.id and w.name=”菜鸟教程” 表的别名实例
在下面的情况下,使用别名很有用:
- 在查询中涉及超过一个表
- 在查询中使用了函数
- 列名称很长或者可读性差
- 需要把两个列或者多个列结合在一起
15. INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
16. UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

    SELECT country, name FROM Websites
    WHERE country='CN'
    UNION ALL
    SELECT country, app_name FROM apps
    WHERE country='CN'
    ORDER BY country;
  1. INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
    INSERT INTO Websites (name, country) SELECT app_name, country FROM apps;
  2. CREATE DATABASE dbname; 用于创建数据库
  3. CREATE TABLE tablename;

    CREATE TABLE Persons
    (
        PersonID int,  
        LastName varchar(255) NOT NULL,  # 不接收NULL值
        FirstName varchar(255),
        Address varchar(255),
        City varchar(255),
        UNIQUE (LastName)  # 在Lastname上面添加UNIQUE约束
        CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)  # 命令unique约束,并定义多个列的unique约束
    );

    如果表已经被创建,再需要约束,可以使用下面的约束

    ALTER TABLE Persons
    ADD UNIQUE (PersonID)
    
    ALTER TABLE Persons
    ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

    撤销UNIQUE约束

    ALTER TABLE Persons
    DROP INDEX uc_PersonID
  4. PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (P_Id)
)

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
  1. 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
添加一个外键
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)
)

命名并添加多个外键
CREATE TABLE Orders
(
    O_Id int NOT NULL,
    OrderNo int NOT NULL,
    P_Id int,
    PRIMARY KEY (O_Id),
    CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
    REFERENCES Persons(P_Id)
)
  1. CHECK 约束用于限制列中的值的范围。
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)
)

ALTER TABLE Persons
ADD CHECK (P_Id>0)

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
  1. DEFAULT 约束用于向列中插入默认值,如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()/'test'
)


ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
  1. CREATE INDEX 语句用于在表中创建索引。
//CREATE INDEX 语法,允许使用重复的值
CREATE INDEX index_name
ON table_name (column_name)

// CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引,不允许使用重复的值,
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

//CREATE INDEX 实例
1. 在Person表的LastName列上创建一个名为“Pindex”的索引
CREATE INDEX PIndex
ON Persons (Lastname)
2. 如果要建立多个索引,可以在括号中列出这些列的名称,用逗号隔开
CREATE INDEX PIndex
ON Persons (LastName,FirstNme)
  1. 删除各种
1. // DROP INDEX 语句 用于删除表中的索引
    ALTER TABLE table_name DROP INDEX index_name

2. // DROP TABLE 语句
    DROP TABLE table_name

3. //DROP DATABASE 语句
    DROP DATABASE database_name

4. //TRUNCATE TABLE 语句   用于删除表内的数据,但并不删除表本身
    TRUNCATE TABLE table_name
  1. AUTO INCREEMENT
    Auto-increment 会在新记录插入表中时生成一个唯一的数字。
ID int NOT NULL AUTO_INCREMENT
  1. SQL视图
  2. SQL日期

    • NOW() 返回当时的日期和时间 2017-07-27 20:53:22
    • CURDATE() 返回当前的日期 2017-07-27
    • CURTIME() 返回当前的时间 20:53:22
    • DATA() 提取日期或日期/时间表达式的日期部分 date(now()) -> 2017-07-27
    • EXTRACT() 返回日期/时间的单独部分->EXTRACT()函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

      unit的值 :
      MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH
      select extract(hour from now())

    • DATE_ADD() 向日期添加指定的时间间隔

    • DATA_SUB() 从日期减去指定的时间间隔
    • DATEDIFF() 返回两个日期之间的天数
    • DATE_FORMAT() 用不同的格式显示日期/时间
      1. MYSQL
        DATE - 格式:YYYY-MM-DD
        DATETIME - 格式:YYYY-MM-DD HH:MM:SS
        TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
        YEAR - 格式:YYYY 或 YY
        TIME - 格式: HH:MM:SS
  3. SQL NULL
NULL 用作未知的或不适用的值的占位符。
IS NULLIS NOT NULL

// IFNULL()  = COALESCE()
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
  1. SQL 通用数据类型
函数
  1. length() 用于获取长度,一个汉字长度为3
  2. AVG() 返回平均值
  3. COUNT() 返回行数

    COUNT(*)是所有行数
    COUNT(column_name)是不包括NULL的行数
    COUNT(DISTINCT column_name)是独一性的
  4. MAX() 返回最大值
  5. MIN() 返回最小值
  6. SUM() 返回总和
  7. UCASE() 将某个字段转换为大写
  8. LCASE() 将某个字段转换为小写
  9. MID() 从某个文本字段提取字符
    MID(name,1,4)第一个是位置,从1开始,第二个是个数
  10. LEN() 返回某个文本字段的长度
  11. ROUND() 对某个数值字段进行指定小数位数的四舍五入
    round(1.5) -> 2== round(1.5,0)
    第二位是几就是保留几位小小数
  12. NOW() 返回当前的系统日期和时间
  13. FORMAT() 格式化某个字段的显示方式
  14. GROUP BY GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
  15. HAVING
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值