Sql基本语法—create,drop,alter,select,show, alter, desc insert into,delete from —书写,执行顺序—5个join,笛卡尔积

3 篇文章 0 订阅
2 篇文章 0 订阅

目录

a. 操作数据库

1. 创建数据库

2. 查看数据库

3. 修改数据库

4. 删除数据库

5. 选择数据库

b. 操作表

1. 创建表

2. 查看表

3. 修改表

4. 删除表

c. 操作表记录CRUD

1. insert

2. update 

3. delete   delete from tbl_name [WHERE where_definition]    

d. select

1. 基本查询 select [distinct ] *|{column1, column2. column3..} FROM    table;

2.使用where子句进行过滤查询

3.使用order by关键字对查询结果进行排序操作

4.聚合函数—Count ,Sum,Avg ,max/min 

5.group by分组查询

where子句和having子句的区别

e. 查询语句的书写顺序和执行顺序

f. 表连接

leftjoin

rightjoin

表连接图片


  1. 数据库的增删改查选择:create ,drop ,alter ,select ,show
  2. 表的增删改查:create ,drop,alter, desc
  3. 表中的数据CRUD:insert,delete from,update,select  -where子查询

a. 操作数据库

1. 创建数据库

  1. 创建一个名称为mydb1的数据库。  create database mydb1;
  2. 创建一个使用gbk字符集的mydb2数据库。 create database mydb2 character set gbk;
  3. 创建一个使用utf8字符集,并带校对规则的mydb3数据库。 create database mydb3 character set utf-8 collate utf8_bin;

2. 查看数据库

  1. 显示数据库创建语句:SHOW CREATE DATABASE db_name
  2. 查看当前数据库服务器中的所有数据库  show databases;
  3. 查看前面创建的mydb2数据库的定义信息: show create database mydb3;

3. 修改数据库

  1. 查看服务器中的数据库,并把其中mydb2字符集修改为utf8:alter database mydb2 character set utf8;

4. 删除数据库

  1. 删除前面创建的mydb1数据库 drop database mydb1;

5. 选择数据库

  1. 进入数据库:use db_name;
  2. 查看当前所选的数据库: select database();

b. 操作表

1. 创建表

  1. 创建一个员工表employee 

create table employee(
 id int primary key auto_increment,
 name varchar(20) unique,
 gender bit not null,
 birthday date,
 entry_date date,
 job varchar(40),
 salary double,
 resume text
);

2. 查看表

  1.  查看表结构:desc tabName
  2.  查看当前数据库中所有表:show tables
  3.  查看当前数据库表建表语句 show create table tabName;

3. 修改表

  1. alter table tablename  add/modify /drop/character set /change 列名 列类型
  2.  *修改表的名称:rename table 表名 to 新表名;
  3. 在上面员工表的基本上增加一个image列:alter table employee add image blob;
  4. 修改job列,使其长度为60。alter table employee modify job varchar(60);
  5. 删除gender列。alter table employee drop gender;
  6. 表名改为user。rename table employee to user;
  7. 修改表的字符集为gbk。 alter table user character set gbk;
  8. 列名name修改为username。 alter table user change name username varchar(20);

4. 删除表

  1. 删除user表。drop table user;

c. 操作表记录CRUD

1. insert

insert into tablename [(列名,列名)] values (值 ,值);    

  1. 插入的数据应与字段的数据类型相同。
  2. 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
  3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。
  4. 字符和日期型数据应包含在单引号中。
  5. 插入空值:不指定或insert into table value(null)
  6. 如果要插入所有字段可以省写列列表,直接按表中字段顺序写值列表

使用insert语句向表中插入三个员工的信息

  1. insert into employee (id,name,gender)values (null,'张飞',1,);
  2. insert into employee values (null,'关羽',1,'1998-08-08','1998-10-01','财神爷','老大的二弟');
  3. insert into employee values (null,'刘备',0,'1990-01-01','公司的老大'),(null,'赵云',1,'2000-01-01','老大贴身人');

2. update 

update tbl_name set 列名=expr1 [, col_name2=expr2 ...] [WHERE where_definition]  
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行

  1. 将所有员工薪水修改为5000元。 update employee set salary = 5000;
  2. 将姓名为’张飞’的员工薪水修改为3000元。update employee set salary = 3000 where name='张飞';
  3. 将姓名为’关羽’的员工薪水修改为4000元,job改为ccc。 update employee set salary=4000,job='ccc' where name='关羽';
  4. 将刘备的薪水在原有基础上增加1000元。 update employee set salary=salary+1000 where name='刘备';

3. delete   delete from tbl_name [WHERE where_definition]    

  1. 如果不使用where子句,将删除表中所有数据。
  2. Delete语句不能删除某一列的值(可使用update)
  3. 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
  4. 同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题, 外键约束
  5. 删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。
  6. TRUNCATE删除快,删除整表,不记录日志 ,不可以回滚
  7. Delete 删除部分数据,记录日志,可以回滚       

例题:

  1. 删除表中名称为’张飞’的记录。 delete from employee where name='张飞';
  2. 删除表中所有记录。 delete from employee;
  3. 使用truncate删除表中记录。 truncate table employee;

d. select

1. 基本查询 select [distinct ] *|{column1, column2. column3..} FROM    table;

  1. 查询表中所有学生的信息。select * from exam;
  2. 查询表中所有学生的姓名和对应的英语成绩。 select name,english from exam;
  3. 过滤表中重复数据。select distinct english from exam;
  4. 在所有学生分数上加10分特长分显示。 select name , math+10,english+10,chinese+10 from exam;
  5. 统计每个学生的总分。 select name ,english+math+chinese from exam;
  6. 使用别名表示学生总分。select name as 姓名 ,english+math+chinese as 总成绩 from exam;

2.使用where子句进行过滤查询

  1. 查询姓名为张飞的学生成绩: select * from exam where name='张飞';
  2. 查询英语成绩大于90分的同学: select * from exam where english > 90;
  3. 查询总分大于230分的所有同学:select name 姓名,math+english+chinese 总分 from exam where math+english+chinese>230;
  4. 查询英语分数在 80-100之间的同学。:select * from exam where english between 80 and 100;
  5. 查询数学分数为75,76,77的同学: select * from exam where math in(75,76,77);
  6. 查询所有姓张的学生成绩:select * from exam where name like '张%';( '张__')
  7. 查询数学分>70,语文分>80的同学: select * from exam where math>70 and chinese>80;

3.使用order by关键字对查询结果进行排序操作

select column1, column2 from table where... order by column asc|desc; asc 升序 -- 默认就是升序, desc 降序

  1. 对语文成绩排序后输出: select name,chinese from exam order by chinese desc;
  2. 对总分排序按从高到低的顺序输出: select name 姓名,chinese+math+english 总成绩 from exam order by 总成绩 desc;
  3. 对姓张的学生成绩排序输出: select name 姓名,c+e 总成绩 from exam where name like '张%' order by 总成绩 desc;

4.聚合函数—Count ,Sum,Avg ,max/min 

(1)Count -- 用来统计符合条件的行的个数

  1. 统计一个班级共有多少学生:select count(*) from exam;
  2. 统计数学成绩大于90的学生有多少个: select count(*) from exam where math>70;
  3. 统计总分大于230的人数有多少:select count(*)from exam where math+english+chinese > 230;

(2)Sum -- 用来将符合条件的记录的指定列进行求和操作

  1. 统计一个班级数学总成绩:select sum(math) from exam;
  2. 统计一个班级语文、英语、数学各科的总成绩:select sum(math),sum(english),sum(chinese) from exam;
  3. 统计一个班级语文、英语、数学的成绩总和:select sum(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam; // 在执行计算时,只要有null参与计算,整个计算的结构都是null,此时可以用ifnull函数进行处理
  4. 统计一个班级语文成绩平均分: select sum(chinese)/count(*) 语文平均分 from exam;

(3)Avg -- 用来计算符合条件的记录的指定列的值的平均值

  1. 求一个班级数学平均分:select avg(math) from exam;
  2. 求一个班级总分平均分:select avg(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;

(4)max/min -- 用来获取符合条件的所有记录指定列的最大值和最小值

  1. 求班级最高分:select max(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;
  2. 求班级最低分:select min(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;

5.group by分组查询

  1. 对订单表中商品归类后,显示每一类商品的总价: select product,sum(price) from orders group by product;
  2. 询购买了几类商品,并且每类总价大于100的商品: select product 商品名,sum(price)商品总价 from orders group by product having sum(price)>100;
  3. 查询单价小于100而总价大于150的商品的名称:select product from orders where price<100 group by product having sum(price)>150;

where子句和having子句的区别:

  1. where子句在分组之前进行过滤having子句在分组之后进行过滤
  2. having子句中可以使用聚合函数,where子句中不能使用
  3. 很多情况下使用where子句的地方可以使用having子句进行替代 

e. 查询语句的书写顺序和执行顺序

书写顺序: select--from--where--group by--having--order by  , 其中select和from是必须的,其他关键词是可选的,
执行顺序按照下列子句次序:
    1.from 子句:执行顺序为从后往前,从右到左。数据量较少的表尽量放在后面
    2.where子句:执行顺序为自下而上,从右到左。将能过滤掉最大数量的记录条件写在where子句的最右      
    3.group by子句:执行顺序从左往右分组。 最好在group不用前使用where将不需要的的记录在group by之前过滤掉
    4.having子句:消耗资源,尽量避免使用,having会在检索出所有的记录之后才对结果进行过滤,需要排序等操作
    5.select 子句:少用*号,尽量取字段名称,oracle在解析的过程中,通过查询数据字典将*号,依次转换成所有的列名,消耗时间
    6.order by子句:执行顺序从左往右排序,消耗资源

select子句顺序

子句

说明

是否必须使用

select

要返回的列或表示式

from

从中检索数据的表

仅在从表选择数据时使用

where

行级过滤

group by

分组说明

仅在按组计算聚集时使用

having

组级过滤

order by

输出排序顺序

limit

要检索的行数

f. 表连接

leftjoin

rightjoin

表连接图片

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值