闲来无聊,写点东西。 SQL语言 一种关系型数据语言,介于关系代数与关系演算之间的结构化查询语言,也是一个通用的,功能及强的关系型数据库语言。接下来介绍其基本用法:
(1) CREATE TABLE : 用来创建一个关系表
语法: CREATE TABLE 表名 ( 列名1 数据类型 “约束”(有可无) 列名2 数据类型 “约束”(有可无) 列名3 数据类型 “约束”(有可无) ... );//注意,SQL语句要以分号结尾 数据类型: integer(size) 仅容纳整数,size规定数字的最大位数 int(size) int decimal(size,d);容纳带小数的数字size 规定带数字的最大位数,d规定小数点右侧的最大位数 real 实型 char(size) 固定长度的字符串,size规定字符串的长度 varchar(size) 可变长度的字符串,size规定字符串的最大字符数 text 文本 null 空 date 日期 2020/09/02 2020-09-02 blob:二进制 ... 约束: not null 不为空 unique 唯一 primary key 主键 (主键渐必须是唯一且不为空) default 默认 eg: default "China" check 用于限制列中值的范围 eg: check score >= 0 and score <= 100(2)DROP TABLE: 删除一个表
语法: DROP TABLE 表名;(3)ALTER TABLE : 修改表结构
重命名: ALTER TABLE 旧表名 rename to 新表名; 增加一列: ALTER TABLE 表名 add column 列名 数据类型(4)INSERT INTO : 往表中插入数据
语法: INSERT INTO 表名 VALUES(值1,值2,值3...);//给所有的列插入数据,有多少列就要填多少值。 INSERT INTO 表名 VALUE(列名1,列名2,....) VALUE (值1,值2,... );//给指定列插入数据(5) 修改表内的数据
UPDATE 表名 set 列名 = 新值,...; UPDATE 表名 set 列名 = 新值,...WHERE 条件;//条件用来定位要修改的某些行 条件: 列名 运算符 值 运算符: = != > >= <= 如果有多个条件,可以用and和or连接 eg: update stu set age = 21; update stu set age = 30 where num = 1001; update stu set age = 30 where num > 60 and num < 999;(6)DELETE FROM 删除表中所有的数据
DELETE FROM 表名;//删除表中所有的数据 DELETE FROM 表名 WHERE 条件;//删除满足条件数据 eg: delete from stu; delete from stu where num = 1003;(7)SELECT 数据查询
语法: SELECT 列名1,...FROM 表名; SELECT *FROM 表名;//查询整个表的数据 SELECT *FROM 表名 where 条件;//查询整个表的数据 eg: insert into stu1(stu_num,stu_name,age,,addr) select stu_num,stu_name,age,addr from stu;//从stu表中插入数据,然后插入到stu1表中(8)高级查询
模糊查询 列名 like 通配符 (_%) _: 匹配单个字符 &:匹配任意单个字符 eg: select *from stu where name like 'wang_'; select *from stu where name like '%wang%' 排序: 按指定的列名进行排序 order by 列名 asc/desc;//asc:升序 desc:降序 eg: select *from stu order by age desc;//根据年龄降序排序 限制记录条数 limit 数字 eg: select *from stu limit 2;//查看表中的前两条记录 排序+限制 eg: select *from stu order by age desc limit 1;//查看年龄最大的记录 聚合函数 cout(列*名) //统计记录数量 sum(列名) //计算给定列的总和 avg(列名) //计算给定列的平均值 min(列名) //计算给定列的最小值 max(列名) //计算给定列*的最大值 eg: select cout(*) from stu; select max(age)-min(age) from stu; 别名 eg: select num AS 学号,name AS 姓名 from stu; 分组: group by eg: select age,cout(*) from stu group by age;//查询每个年龄的人数 范围查询: between ... and ... eg: select *from stu where age between 10 and 20; 去重: distinct eg: select distinct age from stu; 子查询: in(值,...) in(select ...) eg: select *from stu where age in (18,20,25); select *from stu where age in (select age from stu where age < 30); ★★★★★★多表联接 select 列名,... 表1,表2,...where 条件 select 列名,... form 表1 join 表2 on 联接条件 ... where 过滤条件; eg: 学生表: 学号 姓名 年龄 班级 学校 ... create table t_stu(num int primary key, name text,age int,class int school int); intsrt into t_stu values(1001,'wb1',18,100101,2001); insert into t_stu values(1002,'wb2',19,100101,2001); insert into t_stu values(1003.'wb3',20,100101,2002); 学校表: 编号 校名 电话 地址 ... create table t_school(num int primary key,name text, tel text,addr text); insert into t_school values(2001,'first',010-123456,'changsha'); insert into t_school values(2002,'second',010-0101011,'shanghai'); 需求: 查询学生的学号,姓名,学校名 select t_stu.num,t_stu.name,t_school,name from t_stu,t_school); ===》学生表中的每一行都与学校表中的每一行进行联结,结果称之为 笛卡尔积 此时,需要指明两个表联结条件,在上述表中,联结条件是 学校的编号相同 两种联结写法: 第一种: select t_stu,num, t_stu.name,t_school.name from t_stu,t_school where t_stu.school = t_school.num; 第二种:select t_stu.num,t_stu.name,t_school.name from t_stu join t_school on t_stu.school = t_school.num; select t_stu.num,t_stu.name,t_school.name from t_stu join t_school on t_stu.school = t_school.num where t_stu.num = 1002;好了,今天可以愉快的开黑了!