当前位置:网站首页>SQL语言

SQL语言

2022-07-04 12:39:00 游戏编程

SQL语言

语法基础

注释

# 使用'#'注释-- 使用'--'注释/*多行注释*/

创建使用数据库

CREATE DATABASE db01;USE db01;

创建表

CREATE TABLE table01 (  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  col1 INT NOT NULL DEFAULT 1,  col2 VARCHAR(45) NULL,  col3 DATE NULL);

修改表

# 添加新列ALTER TABLE table01 ADD col CHAR(20);# 修改列 ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 约束条件ALTER TABLE table01 CHANGE col col4 CHAR(32) NOT NULL DEFAULT 'xxx';# 删除列ALTER TABLE table01 DROP COLUMN col4;# 删除表DROP TABLE table01;

增删改

# 添加数据INSERT INTO table01(col1, col2)VALUES(val1, val2);# 表数据迁移CREATE TABLE newtable ASSELECT * FROM table01;# 更新UPDATE table01SET col = valWHERE 条件;# 删除DELETE FROM table01WHERE 条件;

查询

基础

# 去重SELECT DISTINCT * FROM table01;# 限制返回SELECT * FROM table01 LIMIT 5, 2; # 从5开始(不包括5)返回两行数据,即6,7# 排序 ASC升序,DESC降序SELECT * FROM table01ORDER BY col1 DESC, col2 ASC;# 筛选SELECT * FROM table01 WHERE 条件;

计算字段

函 数说 明
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和
# 举例:计算去重的col1列的均值命名为avg_colSELECT AVG(DISTINCT col1) AS avg_colFROM table01;

文本处理

可以使用 LIKE + 正则表达式 筛选文本

SELECT *FROM table01WHERE col1 LIKE '[^AB]%'; -- 不以 A 和 B 开头的任意文本

还可以使用一些函数进行文本处理:

函数说明
LEFT()左边的字符
RIGHT()右边的字符
LOWER()转换为小写字符
UPPER()转换为大写字符
LTRIM()去除左边的空格
RTRIM()去除右边的空格
LENGTH()长度
SOUNDEX()将一个字符串转换为描述其语音表示的字母数字模式

分组

分组就是把具有相同的数据值的行放在同一组中。可以对同一分组数据使用汇总函数进行处理。
WHERE 过滤行,HAVING 过滤分组,行过滤应当先于分组过滤。

SELECT col1, COUNT(*) AS numFROM table01WHERE col1 > 2GROUP BY col1HAVING num >= 2;

还需要注意以下几点

  • GROUP BY 子句出现在 WHERE 子句之后,ORDER BY 子句之前;

  • 除了汇总字段外,SELECT 语句中的每一字段都必须在 GROUP BY 子句中给出;

  • NULL 的行会单独分为一组;

  • 大多数 SQL 实现不支持 GROUP BY 列具有可变长度的数据类型。

子查询

子查询中只能返回一个字段的数据。可以将子查询的结果作为 WHRER 语句的过滤条件:

SELECT *FROM table01WHERE col1 IN (SELECT col1               FROM table02);

连接查询

连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 WHERE。
等值连接:

SELECT A.value, B.valueFROM tablea AS A INNER JOIN tableb AS BON A.key = B.key;

也可以不明确使用 INNER JOIN,而使用普通查询并在 WHERE 中将两个表中要连接的列用等值方法连接起来。

SELECT A.value, B.valueFROM tablea AS A, tableb AS BWHERE A.key = B.key;

自然连接:
自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。

SELECT A.value, B.valueFROM tablea AS A NATURAL JOIN tableb AS B;

外连接:
分为左外连接,右外连接以及全外连接,左外连接就是保留左表没有关联的行,右外连接同理。

SELECT A.value, B.valueFROM tablea AS A LEFT OUTER JOIN tableb as bON A.col1 = B.col1;

组合查询

使用 UNION 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果一般为 M+N 行。每个查询必须包含相同的列、表达式和聚集函数。
默认会去除相同行,如果需要保留相同行,使用 UNION ALL。

SELECT *FROM table01WHERE col1 = 1UNIONSELECT *FROM table01WHERE col1 =2;

使用视图查询

视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作。对视图的操作和对普通表的操作一样。
下面是一个简单的视图创建:

CREATE VIEW myview ASSELECT 语句;

权限管理

在mysql中,账户信息保存在 mysql 这个数据库中

USE mysql;SELECT * FROM user;

账户操作

# 创建一个账户CREATE USER myuser IDENTIFIED BY '密码';# 修改用户名RENAME myuser TO newname;# 删除用户DROP USER newname;# 查看权限SHOW GRANTS FOR myuser;# 授权GRANT SELECT, INSERT ON mydatabase.* TO myuser;# 删除权限REVOKE SELECT, INSERT ON mydatabase.* FROM myuser;# 更改密码SET PASSWROD FOR myuser = Password('new_password');

作者:S++

游戏编程,一个游戏开发收藏夹~

如果图片长时间未显示,请使用Chrome内核浏览器。

原网站

版权声明
本文为[游戏编程]所创,转载请带上原文链接,感谢
https://www.233tw.com/career/134059