Dean的周学习内容:SQL的基本语法

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,数据库表以结构化的格式存储和显示数据,由行和列组成,与 Excel 电子表格中显示的类似。

SQL,指结构化查询语言,全称是 Structured Query Language。

虽然 SQL 是一门 ANSI(美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。除了SQL标准之外,大多数SQL数据库程序都有自己的专有扩展,但它们都支持主要命令。

SQL允许同时运行多个查询:“SELECT FirstName FROM customers; SELECT City FROM customers;”

SQL不区分大小写、关键字之间随便空格

可以选择多列、所有列  “①SELECT FirstName, LastName, City FROM customers;   ②SELECT * FROM customers; ”

Show:

        show databases:展示服务器管理的所有数据库名称

        show tables::展示所在数据库的所有数据表的名称

        show columns from customers:展示所在表的所有列的名称

Select:从数据库中选取数据

        SELECT column_list FROM table_name

Use:

        Use database_name;选择sql模式中的任何现有数据库

Distinct:对于包含有重复值的列,重复值只显示一次

        SELECT DISTINCT City FROM customers; 

Limit:只显示特定数目的检索结果

        SELECT ID, FirstName, LastName, City FROM customers LIMIT 6;从 “customers” 表中选择前 6 个记录

        SELECT ID, FirstName, LastName, City FROM customers LIMIT 3, 5;我们从第三个位置开始选取五条记录

完全限定名称:在列名之前提供表名,通过用点分隔

        SELECT City FROM customers; ======SELECT customers.City FROM customers;

Order By:对结果集进行排序

        SELECT * FROM customers ORDER BY FirstName;(默认按照升序ASC、若想降序使用DESC)

        SELECT * FROM customers ORDER BY LastName, Age;多列排序,(先按照第一个排,有重复的再使用第二个)

WHERE :提取那些满足指定标准的记录

        SELECT * FROM customers WHERE ID = 6;

        在筛选数据时,可以使用SQL运算符:=、<>(不等于)、<、>、<=、>=、Between(在某个范围)、Like(搜索某种模式)、In(指定针对某个列的多个可能值)

        SELECT * FROM customers WHERE ID <> 8;列出了 ID 不等于 "8" 的所有记录

        SELECT * FROM customers WHERE ID BETWEEN 2 AND 6;选择 ID 介于 2 和 6 之间的所有记录

        SELECT ID, FirstName, LastName, Age FROM customers WHERE Age >= 20 AND Age <= 30;选择年龄大于等于 "20" 且小于等于 "30" 的所有记录

        SELECT * FROM customers WHERE City = 'New York' OR City = 'Los Angeles';选择城市为 "New York" 或者 "Los Angeles" 的所有客户

        SELECT * FROM customers WHERE City = 'Chicago' AND (Age=25 OR Age=28);选择城市为 "Chicago" 且年龄为 "25" 或 "28" 的所有客户

IN 运算符允许您在 WHERE 子句中规定多个值:

        SELECT * FROM customers WHERE City = 'New York' OR City = 'Los Angeles' OR City = 'Chicago';======SELECT * FROM customers WHERE City IN ('New York', 'Los Angeles', 'Chicago');选择来自纽约,洛杉矶和芝加哥的所有客户

        SELECT * FROM customers WHERE City NOT IN ('New York', 'Los Angeles', 'Chicago');居住在这些城市的客户将被排除在外

CONCAT() 函数:用于连接两个或多个文本值,并返回连接字符串

        SELECT CONCAT(FirstName, ', ' , City) FROM customers;

AS :为结果列分配自定义名称

        SELECT CONCAT(FirstName,', ', City) AS new_column FROM customers;

算术运算符:对数值操作数执行算术运算

我们要为每位员工的工资增加 500:SELECT ID, FirstName, LastName, Salary+500 AS Salary FROM employees;

UPPER() 、LOWER() 函数:将指定字符串中的所有字母转换为大写、小写

        SELECT FirstName, UPPER(LastName) AS LastName FROM employees;(如果字符串中的字符不是字母,则此函数对它们没有影响)

SQRT() 和 AVG() 函数:返回参数中给定值的平方根、平均值

        SELECT Salary, SQRT(Salary) FROM employees;

        SELECT AVG(Salary) FROM employees;

SUM() 函数:返回数值列的总数

        SELECT SUM(Salary) FROM employees;

MIN() 函数:返回指定列的最小值

        SELECT MIN(Salary) AS Salary FROM employees;

子查询:当一个查询是另一个查询的条件时

        SELECT AVG(Salary) FROM employees;====>3450

        SELECT FirstName, Salary FROM employees WHERE Salary > 3450 ORDER BY Salary DESC;

        将上面两个合并成一个:SELECT FirstName, Salary FROM employees WHERE Salary > (SELECT AVG(Salary) FROM employees) ORDER BY Salary DESC;

LIKE :在 WHERE 子句中搜索列中的指定模式

        SELECT * FROM employees WHERE FirstName LIKE 'D%';选择 FirstName 以字母 “D” 开头的所有员工

        SELECT * FROM employees WHERE LastName LIKE '%s';选择 LastName 以 “s” 为结尾的所有员工

表连接:组合来自两个或多个表的数据

        SELECT customers.ID, customers.Name, orders.Name, orders.Amount FROM customers, orders WHERE customers.ID=orders.Customer_ID ORDER BY customers.ID;WHERE 子句 “连接” 表,条件是来自 customers 表的 ID 应等于 orders 表的 customer_ID

        SELECT ct.ID, ct.Name, ord.Name, ord.Amount FROM customers AS ct, orders AS ord WHERE ct.ID=ord.Customer_ID ORDER BY ct.ID;为表名称或列名称指定别名

连接类型; 内连接、左连接、右连接

        

UNION 操作符:合并两个或多个 SELECT 语句的结果集(无重复)

        SELECT ID, FirstName, LastName, City FROM table1 UNION SELECT ID, FirstName, LastName, City FROM table2;(UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同)

        SELECT FirstName, LastName, Company FROM table3 UNION SELECT FirstName, LastName, NULL FROM table4;(如果你的列在所有查询中不完全匹配,您可以使用NULL(或任何其他)值)

UNION ALL 从每个表中选择所有行,并将它们合并成一个表中(有重复)

        SELECT ID, FirstName, LastName, City FROM table1 UNION ALL SELECT ID, FirstName, LastName, City FROM table2;从 "table1" 和 "table2" 表中选取所有的记录(也有重复的值)

INSERT INTO:插入数据

        INSERT INTO Employees VALUES (6, 'Andrew', 'Thomas', 43);(必须为没有默认值或不支持 NULL 的每个列提供一个值)

        INSERT INTO Employees (ID, FirstName, LastName, Age) VALUES (6, 'Andrew', 'Thomas', 43);指定表的列名

UPDATE :更新表中的记录

        UPDATE table_name SET column1=value1, column2=value2, ... WHERE condition;(省略了 WHERE 子句,所有的记录都将被更新)

DELETE :删除表中的记录

        DELETE FROM table_name WHERE condition;

CREATE TABLE:创建数据库中的表

        CREATE TABLE users ( UserID int, FirstName varchar(100), LastName varchar(100), City varchar(100) );

数据类型:

  • INT(size):-2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。
  • FLOAT(size,d):带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
  • DOUBLE(size,d):带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
  • DATE():日期。格式:YYYY-MM-DD。
  • DATETIME():*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS。
  • TIMESTAMP():*时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS。
  • TIME():时间。格式:HH:MM:SS。
  • VARCHAR(size):保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。
  • TEXT:存放最大长度为 65,535 个字符的字符串。

SQL 约束 :规定表中的数据规则

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。
  • DEFAULT - 规定没有给列赋值时的默认值。

AUTO INCREMENT:在新记录插入表中时生成一个唯一的数字

        CREATE TABLE users ( id int NOT NULL AUTO_INCREMENT, username varchar(40) NOT NULL, password varchar(10) NOT NULL, PRIMARY KEY(id) );

ALTER TABLE:用于在已有的表中添加、删除或修改列、在现有表上添加和删除各种约束

        ALTER TABLE people ADD Birthdy date;在 "people" 表中添加一个名为 "Birthdy" 的列。

        ALTER TABLE people CHANGE FirstName name varchar(55);将名为 "FirstName" 的列重命名为 "name"

DROP TABLE : 

        ALTER TABLE people DROP COLUMN Birthday;在 people 表中删除名为 "Birthday" 的列

        DROP TABLE people;删除整个表

RENAME TABLE :        

        RENAME TABLE people TO users;将 "people" 表重命名为 "users"

View :视图

        CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition;(视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。)

        CREATE VIEW List AS SELECT FirstName, Salary FROM Employees;创建一个视图,显示每个员工的 “FirstName” 和 "Salary"

        CREATE OR REPLACE VIEW List AS SELECT FirstName, LastName, Salary FROM Employees;向 “List” 视图添加 “LastName” 列,我们将通过下列 SQL 更新视图

        DROP VIEW List;

补充:在做LeetCode题的时候发现了查询不存在的话明显示空的情况:这个时候需要用新知识点了(这个地方我确实不晓得)176. 第二高的薪水 - 力扣(LeetCode)​​​​​

ifNull()函数:

3.考虑特殊情况

题目要求,如果没有第二高的成绩,返回空值,所以这里用判断空值的函数(ifnull)函数来处理特殊情况。

ifnull(a,b)函数解释:如果value1不是空,结果返回a。如果value1是空,结果返回b。

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值