概述
– 单行注释 笔记 不是执行代码
/*
多行注释
*/
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 列名 in(select 查询项 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 exists(select 查询项 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
最后
以上就是现实裙子为你收集整理的SQL基础语法的全部内容,希望文章能够帮你解决SQL基础语法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复