SQL学习笔记

来源:互联网 发布:合并报表连续编制知乎 编辑:程序博客网 时间:2024/06/06 18:34

heidiSQL
DBeaver

数据类型

类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 字节 (-8 388 608,8 388 607)) (0,16 777 215) 大整数值 INT/INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值 BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 FLOAT 4 字节 (-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) 单精度浮点数值 DOUBLE 8 字节 (-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的值 小数值 类型 大小 范围 格式 用途 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 TIME 3 ‘-838:59:59’/’838:59:59’ HH:MM:SS 时间值或持续时间 YEAR 1 1901/2155 YYYY 年份值 DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 TIMESTAMP 4 1970-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 PersonsADD UNIQUE (PersonID)ALTER TABLE PersonsADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

    撤销UNIQUE约束

    ALTER TABLE PersonsDROP 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 PersonsADD 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 PersonsADD CHECK (P_Id>0)ALTER TABLE PersonsADD 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 PersonsALTER City SET DEFAULT 'SANDNES'
  1. CREATE INDEX 语句用于在表中创建索引。
//CREATE INDEX 语法,允许使用重复的值CREATE INDEX index_nameON table_name (column_name)// CREATE UNIQUE INDEX 语法在表上创建一个唯一的索引,不允许使用重复的值,CREATE UNIQUE INDEX index_nameON table_name (column_name)//CREATE INDEX 实例1. 在Person表的LastName列上创建一个名为“Pindex”的索引CREATE INDEX PIndexON Persons (Lastname)2. 如果要建立多个索引,可以在括号中列出这些列的名称,用逗号隔开CREATE INDEX PIndexON Persons (LastName,FirstNme)
  1. 删除各种
1. // DROP INDEX 语句 用于删除表中的索引    ALTER TABLE table_name DROP INDEX index_name2. // DROP TABLE 语句    DROP TABLE table_name3. //DROP DATABASE 语句    DROP DATABASE database_name4. //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-DDDATETIME - 格式:YYYY-MM-DD HH:MM:SSTIMESTAMP - 格式:YYYY-MM-DD HH:MM:SSYEAR - 格式:YYYY 或 YYTIME - 格式: 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
原创粉丝点击