MYSQL 笔记1 数据库操作

一些最重要的 SQL 命令
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

SQL SELECT DISTINCT

在表中,一个列可能会包含多个重复值,如果希望仅列出不同的值可以使用distinct。
语法:
SELECT DISTINCT column_name,column_name
FROM table_name;

SQL WHERE 子句

WHERE 子句用于提取那些满足指定条件的记录。
语法:
SELECT column_name,column_name
FROM table_name
WHERE column_name
operator value;

WHERE 子句中的运算符(operator):

运算符 描述 例子
= 等于 SELECT * FROM countries WHERE continent='Asia';
SELECT * FROM countries WHERE area_rank=5;
<> 或 != 不等于 SELECT country FROM countries WHERE type!='landlocked country';

>

<

>=

<=

大于

小于

大于等于

小于等于

SELECT * FROM countries WHERE population > 10000;(单位:万)

SELECT * FROM countries WHERE population> 100 AND population < 10000;

SELECT * FROM countries WHERE area_rank <= 100 AND (continent='Asia' OR continent='Europe');

BETWEEN 在某个范围内

SELECT * FROM countries WHERE population BETWEEN 100 AND10000;

说明:查询范围包括上下限的值

LIKE 搜索某种模式

SELECT * FROM countries WHERE country LIKE '%stan';

说明:‘% ’代表0到多个字符,‘_ ’代表一个字符

IN 指定针对某个列的多个可能值 SELECT * FROM countries WHERE continent in (''Asia,'Europe','Africa');

UPDATE 更新某个字段中的"特定字符串"为其它字符串

UPDATE table_name SET field=REPLACE(field, 'old-string', 'new-string') 
[WHERE Clause]
[例] 更新 book_id 为 3 的book_title 字段值中的 "Java" 为 "Python"

UPDATE book_tbl SET book_title = REPLACE(book_title, 'Java', 'Python') where book_id = 3;

ORDER BY 多列

语法:
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

[例]
SELECT * FROM countries ORDER BY population DESC, area_rank;  先按人口降序,再按领土面积排名(默认升序)排序

SQL INSERT INTO 语句

第一种形式不指定要插入数据的列名(因此每列都要有对应的值且按顺序插入):
INSERT INTO table_name
VALUES (value1,value2,value3,...);

第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

DELETE语句删除所有数据

使用UPDATE和DELETE语句不带WHERE要特别注意,因为会作用于每一条记录!

在不删除表的情况下(表结构、属性、索引保留),删除表中所有的行。
DELETE FROM table_name;
DELETE * FROM table_name;

使用 SQL [charlist] 通配符

MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。例如,

SELECT * FROM countries WHERE country REGEXP '^[AC]';  --选出A或C开头的国家记录
SELECT * FROM countries WHERE country REGEXP '^[^A-F]';  --选出不以A到F开头的国家记录

SQL 别名

别名适用情况如下:
在查询中涉及超过一个表
在查询中使用了函数
列名称很长或者可读性差
需要把两个列或者多个列结合在一起

列的 SQL 别名语法
SELECT column_name AS alias_name
FROM table_name;

表的 SQL 别名语法
SELECT column_name(s)
FROM table_name AS alias_name;

(1)关于列的别名,以下把三个列(continent、area 和 population)结合在一起,并创建一个名为 "country_info" 的别名:

SELECT name, CONCAT(continent, ', ', area, ', ', population) AS country_info
FROM countries;

(2)关于表的别名,
下面的 SQL 语句选取亚洲国家2018年的GDP数据。使用 "countries" 和 "gdp_data" 表,并分别为它们指定表别名 "c" 和 "g":

SELECT c.country, g.gdp2018, g.gdp2018_rank
FROM countries AS c, gdp_data AS g
WHERE c.country_id=g.country_id and c.continet='Asia';

SQL 连接

LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法  ->  https://www.runoob.com/sql/sql-join.html

INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行

SELECT countries.country, countries.continent, countries.population, gdp_data.gdp2018, gdp_data.gdp2018_rank
FROM countries
INNER JOIN gdp_data  --也可以省略INNER,INNER JOIN 与 JOIN 是相同的
ON countries.country_id=countries.country_id;

再如,下例中的两条命令效果相同

mysql> select a.orid, a.name, b.note from order a INNER JOIN order_additional_info b ON a.orid=b.orid;
+------+-----------+--------------------+
| orid | name      | note               |
+------+-----------+--------------------+
| 2350 | 小明      | 不要香菜            |
| 2351 | 小绿      | 多放点香菜和葱     |
| 2352 | 小红      | 西红柿鸡蛋不要鸡蛋 |
| 2353 | 小焱      | 求一袋冰块         |
+------+-----------+--------------------+
4 rows in set (0.00 sec)

mysql>
mysql> select a.orid, a.name, b.note from order a, order_additional_info b WHERE a.orid=b.orid;
(省略)

SQL UNION 操作符

UNION 内部的每个 SELECT 语句必须拥有相同数量的列,对应的列有相似的数据类型。
语法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注意:
1.UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL
2.UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

SQL INSERT INTO SELECT 语句

语法:
从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;

只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

参考资料:菜鸟教程 https://www.runoob.com/sql/sql-syntax.html

发布了89 篇原创文章 · 获赞 1 · 访问量 4845

猜你喜欢

转载自blog.csdn.net/wy_hhxx/article/details/103070609