SQL基础语法

– 单行注释 笔记 不是执行代码
/*
多行注释
*/

0.先操作库 再操作表

1.查看所有的库

show databases;

2.创建自己的库

--数据库基本基础 CURD create update  retrieve DELETE
create databases student;

3.使用这个数据库 每次开启数据库一定要先use一个子库

-- use加对应库名
use student;

4.创建一张数据库表

-- int 整数类型
-- not null 非空指这个数据必须录入,否则报错
-- auto_increment数据自增
-- primary key 主键 
-- 注意:只有一个字段能auto_increment且其必须为主键 
-- varchar 字符串类型(?)字符串的长度 输入的值最多存放多少个字符长
-- 一个表的建立可以没有主键
create table stu(
    id int  not null auto_increment,
    name varchar(20),
    age int default 20,
    score double,
    primary key(id)
);

5.查询库中所有的表

show tables;

6.查看表的结构

-- 属性信息
desc stu;
-- 展示每个字段详细属性信息(外键名称)
show create table stu;

7.插入数据

-- insert 插入数据
-- name,age,score 插入数据的字段名
-- values前面的字段名顺序和类型决定了后面插入实际数据的类型和属性
-- 前后保持一致
insert into stu(name,age,score)values("mike",23,98,5);
-- 必须有主键而且是自增的
-- 添加多条数据
insert into stu()values();
-- 批量添加数据,前提:添加的数据的个数都是一致的和字段的数量匹配
insert into stu(name,age,score)values("a",2,3),("b",3,4),("b",3,5);

8.查询数据

-- select * 查询表中所有数据
select * from stu;
-- 对字段进行筛选
select id,name,age from stu;
-- limit 从0索引位开始的三行内容
select * from stu limit 3;
-- limit 从num1索引位开始数num2条数据
select * from stu limit 2,3;
-- where 筛选所有id为3的数据
select * from stu where id = 3;
-- 使用and 或者 or 来进行对于条件的连接
select * from stu where name = "b" and score > 20 limit 3;
-- order by 根据score的数据来进行排序
-- 默认升序 或 asc 代表升序
select * from stu order by score ;
-- 降序
select * from stu order by score desc;
-- 当需要对多个字段进行排序的时候:如 按类别升序排列,同一类别下的商品按价格降序排列
select name,type,price from order by type asc,price desc;
-- in 查询是在给出的集合内的结果
select * from stu (not) in id(1,2,3,4,5)
-- beteween 查询给定字段范围内的结果
select * from stu (not) where id between 2 and 3;
-- distinct 自动过滤掉字段内的重复内容
select distinct name from student;
-- group by 通过分组来实现对应组别的计数任务
-- group筛选出的结果为单一行数即如果只用group筛选出的结果就相当于distinc的作用--去重
select count(name),age from stu group by age;

9.模糊查询

– %通配符 代任意数据
– 以m开头的数据都可以匹配

select * from stu where name like "m%";
-- 包含m的数据都可以匹配
select * from stu where name like "%m%";
-- 以m为结尾的数据都可以匹配
select * from stu where name like "%m";

– 可以用_来精确占位

select * from stu where name like "m_";
select * from stu where name like "m__";

10.删除数据

-- delete只能按行删除
delete from stu where name = "b" limit 2;

11.更改数据

-- 整条字段下统一置为400
update stu set score = 400;
-- 根据where来有条件地更改数据
update stu set score = 200 where name like("张%");

12.删除数据库/表

-- 删除数据库
drop database databasename;
-- 删除表
drop table tablename;

13.对已经创建好的表名/结构进行更新(增、删、改)

-- 1.增 增加字段hobby
alter table stu add hobby varchar(30);
-- 2.1改 modify只能更改数据类型和字段属性
alter table stu modify name varchar(300);
-- 2.2改 change既可以更改字段可以更改数据类型
alter table stu change name nikename varcha(10);
-- 2.3改表名
alter table tablename rename as tablename_new;
-- 3. 删除字段
alter table stu drop name;

14.多表联查
– 先建立主表 再建立从表

-- 主键和外键的关系来决定主从表关系
-- 操作主表的话从表会跟着改变,而删除则是必须先是先删除从表再删除主表
-- 主表所没有的数据,从表不能添加
-- 主表可以理解为被调用的表
-- 主表和从表之间可以有多个字段成为主键外键
-- 但是两个表之间一般不会互为主从表

-- 先建立两个主表
create table Star(
    id int not null auto_increment,
    Star varchar(200),
    primary key(id) 
);
create table Blood(
    id int not null auto_increment,
    BloodType varchar(20),
    primary key(id)
);

– 再建立从表

-- 使用foreign key的关键词实现对于主从表的对应字段的关联
-- 主键连接的外键必须要是一个primary key
-- 先插入主表数据,再插入从表数据
create table User(
    id int not null auto_increment,
    LoginPWD varchar(20),
    NickName varchar(20),
    Sex varchar(20),
    StarID int,
    BloodTypeID int,
    primary key(id),
    foreigney(StarID) references Star(id),
    foreign key(BloodTypeID) references Blood(id)
);

– 1.左连 属于外连

-- left join TableName1 left join TableName2 on TableName1.keyword1 = TableName2.keyword2;
-- left以左边的表为主体,从表中没有出现的之间数据就是null
select * from User left join Star on User.StarID = Star.id;

– 2.右连 属于外连

-- right以右表作为主体,查询的时候只会出现右表的数据
-- 两表中有重名的的字段,要用表名.字段去连接
select * from User right join Blood on User.BloodTypeID = Blood.id;

– 3.内连

-- 只出现两表共性的内容 
-- 多个inner之间用 空格 来连接 

select NickName,Sex from User inner join  Star on User.StarID = Star.id inner join Blood on User.BloodTypeID = Blood.id where Blood.BloodType = "type A" and Star.Star = "Aries";

-- 当两表出现重复字段的时候 select 表名.字段名 from table1 inner join table2 on....
-- 注意无论什么连接都要在后面声明外键 = 主键

15.函数调用

count();
sum();
avg();
max();
min();
select function(FieldName) from TableName;
-- 函数的调用不能直接嵌套
-- 但是可以通过命名的方式来完成间接嵌套与子查询
-- 例如:
select sum(ms) from (select username,max(score) as ms)from tablename)
-- count(*)查询的是绝对的行数,就算某行全为NULL,也计算在内。
select count(*)
-- coutn(字段名)查询的是该列不为NULL的所有行的行数。
-- 注意:Null不是字符串”Null”,也不是空双引号,它表示没有数据
select count(字段名) 

16.在表建立之后为表增加/删除约束

– 常用的约束有
– 1.主键约束

alter table test add primary key(test_no);

– 2.非空约束

alter table stu modify age int not null;

– 3.外键约束
– 外键是指引用另一个表中的一个或者多个字段
– 被引用的字段应该具有主键约束或者唯一性约束,外键用于建立和加强两表之间的连接。
– 3.1创建一个主外键连接,注意主外键的数据结构要一致

alter table 从表名 add constraint FK_ID foreign key(从表中需要连接的字段即外键名) references 主表名(主表中对应字段即主键名);

– 3.2删除外键约束

alter table 从表名 drop foreign key FK__ID;

– 4.唯一约束

alter table test add unique(test_student);

– 5.check(检查)约束

alter table worker add check(sex in ('男','女'));

– 6.默认约束

alter table stu modify age int default 30;

17.子查询

– 子查询就是在原有的查询语句中嵌入新的查询
– 子查询分类

– 1.where型子查询:把内层的sql语句的查询结果作为外层的sql查询的条件

select 查询项 from 表名
where 列名=select 查询项 from 表名)--内层sql语句查询结果唯一(单行单列)
where 列名 inselect 查询项 from 表名)--内层sql语句查询有一个以上的结果(多行单列)


select goods_id,cat_id,shop_price,goods_name
from goods
where shop_price 
in (select max(shop_price) from goods group by cat_id);

– 2.from型子查询:把内层的sql语句的查询结果作为临时表供外层sql语句再次查询

select 查询项 
from (select 查询项 from 表名 选择表达式)
选择表达式

select * from(
select goods_id,cat_id,shop_price,goods_name 
from goods
order by goods_id desc,cat_id asc)as tmp
group by cat_id;

– 3.exitst型子查询:把外层sql查询到的行带入内层sql查询,要使内层查询成立

select 查询项 from 表名
where existsselect 查询项 from 表名 where 选择表达式)


--把有商品的栏目查询出来
select cat_id,cat_name 
from category 
where exists(select * from goods where goods.cat_id=category.cat_id);

18.关键字作用顺序

from --> 
where --> 
group by --> 
having --> 
order by --> 
select
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值