表相关操作
创建表
sql
CREATE TABLE [IF NOT EXISTS] table_name (
`runoob_id` INT UNSIGNED AUTO_INCREMENT COMMENT '自增主键ID',
`runoob_title` VARCHAR(100) NOT NULL COMMENT '文章标题(非空)',
`runoob_author` VARCHAR(40) NOT NULL COMMENT '作者(非空)',
`submission_date` DATE DEFAULT NULL COMMENT '提交日期(允许空)',
-- 统一指定主键(若单个主键,也可在 `runoob_id` 后直接加 PRIMARY KEY)
PRIMARY KEY (`runoob_id`)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='文章信息表'; -- 表的备注
查看表结构
mysql
desc table table_name;
删除表
mysql
-- 表结构也会删除
drop table [IF EXISTS] table_name;
mysql
-- 保留表结构, 只删除数据
truncate TABLE table_name;
插入数据
mysql
insert into table_name (column1, column2, column3, ...)
values (value1, value2, value3, ...);
如果要在每一列列插入数据,可以省略列名:
mysql
insert into table_name
values (value1,value1, value3, ...);
查询
mysql
select [distinct] column1, column2, ... -- distinct 去重
from table_name
[join table2 on table_name.column = table2.column] -- 内连接(取两表中匹配的记录)
[left join table3 on table_name.column = table3.column] -- 左连接(取左表全部+右表匹配记录)
where condition -- 过滤条件(分组前过滤)
group by column_name(s) -- 按字段分组(通常和聚合函数一起用)
having condition -- 分组后过滤(作用于聚合结果)
order by column_name [asc | desc] -- asc 升序(默认),desc 降序
limit [offset,] row_count; -- 限制返回的行数,可带偏移量(分页)
更新
mysql
update customers
set total_purchases = (
select sum(amount)
from orders
where orders.customer_id = customers.customer_id
)
where customer_type = 'premium';
alter
添加列
mysql
alter table table_name
add column column_name datatype;
修改数据类型:
mysql
alter table table_name
modify column column_name new_datatype;
修改列名:
mysql
alter table table_name
change column old_column_name new_column_name datatype;
删除列:
mysql
alter table table_name
drop column column_name;
添加主键:
mysql
alter table table_name
add primary key (column_name);
通配符
-
百分号 %:匹配零个或多个字符。比如 'a%' 匹配以字母 'a' 开头的任何字符串。
-
下划线_ :表示一个字符
连接
INNER JOIN(内连接/等值连接)
返回两个表中满足连接条件的匹配记录(即两表的交集)。
sql
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;
INNER
可省略
LEFT JOIN(左连接)
返回左表的所有记录 ,以及右表中与左表匹配的记录;若右表无匹配,显示NULL
sql
SELECT 列名 FROM 左表 LEFT JOIN 右表 ON 左表.关联列 = 右表.关联列;
RIGHT JOIN(右连接)
返回右表的所有记录 ,以及左表中与右表匹配的记录;若左表无匹配,显示NULL
sql
SELECT 列名 FROM 左表 RIGHT JOIN 右表 ON 左表.关联列 = 右表.关联列;
数据库相关操作
注意 sql 结尾有分号
切换数据库:
mysql
use database;
列出所选数据库中所有表:
mysql
show tables;
创建数据库:
mysql
create database [if not exists] database_name
[character set charset_name] -- 字符集
[collate collation_name]; -- 排序规则
删除数据库:
mysql
drop database database_name; -- 直接删除数据库,不检查是否存在 或
drop database [if exists] database_name;
NULL值
NULL 表示缺失或未知,不等于空字符串("")或0,不代表任何具体值
普通的 =
或 !=
对NULL无效,需使用以下运算符:
-
IS NULL :当列值为NULL时返回
true
例:
SELECT * FROM 表 WHERE 列 IS NULL;
-
IS NOT NULL :当列值不为NULL时返回
true
例:
SELECT * FROM 表 WHERE 列 IS NOT NULL;
-
<=> :特殊比较运算符,当两值相等或都为NULL 时返回
true
例:
SELECT * FROM 表 WHERE 列 <=> NULL;
(等价于IS NULL
)