一:构建数据库和表的语法,字段数据类型
[En]
One: syntax for building database and table, field data type
1:建库建表语法
create (创建,关键字) database (数据库,关键字)
IF NOT EXISTS 作用:如果需要创建的库已存在,将不会创建
DEFAULT CHARSET 作用: 指定默认字符集
CREATE DATABASE IF NOT EXISTS name DEFAULT CHARSET utf8;
use 作用:通过数据库名指向数据库
table :建表关键字
use name;
create table if not exists test(字段1 数据类型 (长度) 约束条件,字段2 数据类型 (长度) 约束条件...)DEFAULT CHARSET=utf8;
2:常见字段类型有:
1:整数型。
int:标准整型。使用4个字节存储(常用)。
bigint:大整型。使用8个字节进行存储。
1.2:小数型。
float:单精度。占用4个字节存储数据,精度范围大概为7位左右。
double:双精度浮点型 16位精度 使用8个字节进行存储。
2:字符串类型。
char(n):固定长度,最多255个字符。
varchar(n):可变长度,最多65535个字符。
char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数。
text _:_可变长度,最多65535个字符
3:日期和时间类型。
date:3字节,日期,格式:2014-09-18
time:3字节,时间,格式:08:42:30
datetime:8字节,日期时间,格式:2014-09-18 08:42:30
3:常用属性
1.primary key :
用于确保指定行的唯一性。在指定为主键的列中,该值不能重复或为空。
[En]
Used to ensure the uniqueness of the specified row. The value cannot be repeated or empty in a column specified as the primary key.
2 .auto_increment :
唯一的整数标识符会分配给新插入的行,并且会自动添加每个新插入的行。
[En]
A unique integer identifier is assigned to the newly inserted row and each new inserted row is automatically added.
3 .default :
设置该字段的默认值,并在该字段的值为空时填充该值。
[En]
Set the default value for the field and populate it when the value of the field is empty.
4.null:
为列指定null属性时,该列可以保持为空。
5.not null:
如果将一个列定义为not null,将不允许向该列插入null值。
6.unique:
被赋予unique属性的列将确保所有值都有不同的值,只是null值可以重复。
案例:
创建数据库 db3 设置字符集 utf8CREATE DATABASE IF NOT EXISTS db3 DEFAULT CHARSET utf8;# 指定创建表的数据库use db3;# 创建student表 写字段 数据类型 约束 设置字符集utf8CREATE TABLE student( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, # 主键id 唯一并且设置自增 NAME VARCHAR(20) NOT NULL, # 姓名 birthday DATE NOT NULL, #出生年月 age int, # 年龄intro text , #简介 文本 money float null default'0', # 钱 默认为0sfz varchar(20) not null unique # 身份证 约束 不为空且唯一
)DEFAULT CHARSET=utf8;
undefined
二:增删改查语法
1.添加表数据 :
insert into 表名(列名1,列名2…)values(列1数据,列2数据…);
案例:
2.删除表数据 :
2.1 按条件删除指定数据:
delete from 表名 where 选择条件 ;
2.2 销毁整张表:
drop table 表名;
案例:
3.修改表数据 :
update 表名 set 列名=列值,列2名=列2值…where 选择条件;
案例:
4.修改表结构:
4.1 添加列:
alter table 表名 add 列名 数据类型;
4.2 删除列:
alter table 表名 drop column 列名;
案例:
5.表查询 :
5.1 查询表所有数据:
select * from 表名;
5.2 指定查询:
select 列名1 as [列别名],列名2... from 表名 as [表别名]
where 字段='值' [查询条件] group by [分组条件]
having [控制打印] order by [排序 默认升序 尾端加desc 为降序]
案例:
三 :表关联查询
1.两表查询 :
1.1 内连接:
关键字 inner join on 作用: 获取两个表的公共部分
SELECT * FROM [表名] [别名] INNER JOIN [表名] [别名] ON 表1.字段=表二.字段;
1.2 左连接:
关键字 left join on 作用: 获取左表全部内容 和 两个表的公共部分
SELECT * FROM [表名] [别名] LEFT JOIN [表名] [别名] ON 表1.字段= 表2.字段;
1.3 右连接:
关键字 right join on 作用: 获取右表全部内容和两个表公共部分
SELECT * FROM [表名] [别名] RIGHT JOIN [表名] [别名] ON 表1.字段 = 表2.字段 ;
案例:
1.4 :全连接:
相等于 左连接 union 右链接 ,
union 获取两个表的数据并且去重 , union all 表示获取两个表全部
SELECT * FROM [表名] [别名] LEFT JOIN [表名] [别名] ON 表1.字段 = 表2.字段
UNION
SELECT * FROM [表名] [别名] RIGHT JOIN [表名] [别名] ON 表1.字段 = 表2.字段;
案例:
2.多表查询 :
作用: 一次性查询多个表的数据
案例: 三表查询
ps:需要添再加表只需要在后面再使用左连接关键字添加加表4就好
#三表关联查询 ,第一个表关联中间表的结果,然后关联第二个表
SELECT * FROM [表名] [别名] INNER JOIN [表名] [别名] ON 表1.字段=表2.字段
LEFT JOIN [表名] [别名] ON 表2.字段= 表3.字段
四:子查询
1.列子查询(单例,多例) :
性质:子查询 指一个查询语句 嵌套在 另一个查询语句内部的查询
SELECT * FROM [表名] WHERE [表字段] = (SELECT [字段] FROM [表名] WHERE [表字段] = [值] );
案例:(多例就是查询条件放大)
2.表子查询 :
在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果做为外层查询的过滤条件,在子查询中通常可以使用 IN EXISTS ANY ALL操作符。
SELECT * FROM [表一] WHERE ([字段1],[字段2]...) IN (SELECT [字段1],[字段2]... FROM [表二]);
案例代码:
建表
CREATE DATABASE IF NOT EXISTS info DEFAULT CHARSET utf8;
USE info;
建表
CREATE TABLE IF NOT EXISTS emp(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(20),
salary INT, dept_id INT , manager_id INT
);
#插入数据
INSERT INTO emp(emp_name,salary,dept_id,manager_id)
VALUES("tom",15000,1,NULL),("lucy",14000,5,NULL),
("张建国",4000,1,1),("李华",600,1,1),("王强",6000,2,2),
("周杰",5000,2,2),("曹光思",7000,5,3),("刘毅真",8000,5,3),
("王岩",5000,5,3);
#子查询,单值
将查询语句返回的结果做为另一个查询语句的条件
SELECT * FROM emp WHERE salary >(SELECT salary FROM emp WHERE emp_name="王强");
SELECT * FROM emp WHERE dept_id = (SELECT dept_id FROM emp WHERE emp_name = "张建国")
AND salary > (SELECT salary FROM emp WHERE emp_name = "王岩")
子查询 多值
in 条件 in (匹配括号中的值) 匹配成功打印
SELECT * FROM emp WHERE dept_id IN(SELECT dept_id FROM emp WHERE emp_name LIKE "王%");
将返回的结果表 作为查询表使用
SELECT * FROM (SELECT * FROM emp WHERE dept_id >2 AND salary > 5000) e WHERE emp_id > 1;
Original: https://www.cnblogs.com/zzc1102/p/15994600.html
Author: and脱发周大侠
Title: SQL基础语法
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505580/
转载文章受原作者版权保护。转载请注明原作者出处!