Mysql单表操作

MYSQL的SQL语句

SQL: Structrued Query Langauage 结构化的查询语言

​ DDL: 数据定义语言 : 定义数据库或者表结构. alter(修改) create(创建) drop(删除) truncate(截断)

​ DML: 数据操纵语言: 用来操作表中数据: insert(插入) update(更新) delete(删除)

​ DQL: 数据查询语言: 用来查询数据 select(选择) from(从哪里查) where(哪一条,判断条件)

​ DCL: 数据空值语言: 用来控制用户权限 grant(授权) revoke(取消授权)

数据库的CRUD的操作

  • 增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)

创建数据库
 

create database 数据库的名字 ---用的非常多的方式
create database day08_1;
create database 数据库的名字 character set 字符集;
create database day08_2 character set gbk;
create database 数据库的名字 character set 字符集 collate 校对规则;
校对规则 : 比较规则 字符串比较的规则 , a A   a=A 默认情况下不区分大小写
a=1   A=2 
create database day08_3 character set utf8 collate utf8_bin;  
查看数据库
 

-- 查看数据库定义的语句: 查询的是数据库创建的语句

show create database 数据库的名字

--查看所有数据库

show databases;

修改数据库的操作
--修改数据的字符集

alter database 数据库的名字  character set 字符集

alter database day08_2 character set utf8;
删除数据库
drop database 数据库名字;

drop database day08_3;
其他数据库操作命令
--切换数据库(选中数据库)

use 数据库名字

--当前选中是哪个数据库,当前正在使用哪个数据库

select database();

表的CRUD操作

创建表
语法:
    create table 表名(

      列名 列的类型 [列的约束],

      列名 列的类型 [列的约束]

    );

列的类型

java                mysql

int                 int

String              char(长度)/varchar(长度)

                    char(10): 固定长度字符hello 没有填满用空格补齐10个

                    varchar(10):可变长度字符hello  只占5个字符

                                可以存放10个汉字 ,10个字符

boolean             boolean

Date                date : YYYY-MM-DD

                    time : hh:mm:ss

                    datetime: YYYY-MM-DD hh:mm:ss  默认值是null

                    timestamp:YYYY-MM-DD hh:mm:ss  默认值是当前的时间

                    text: 大文本类型

                    blob: 大电影 java-存放和读取
                   
创建员工表: 员工编号,员工名称,工资,部门编号 employee

create table emp1(

    empno int,

    ename varchar(20),

    sal   double,

    deptno int

);
列的约束

    主键约束: primary key不能重复,不能为空  通常用在编号ID

    唯一约束: unique 唯一约束: 不能重复,但是可以为空

    非空约束: not null 不能为空

create table emp2(

    empno int primary key auto_increment,

    ename varchar(20) unique,

    sal double not null,

    deptno int

);
auto_increment 自动增长属性

查看表
--  查看所有的表

    show tables;

--  查看表的创建过程

    show create table 表名

--  查看表结构

    desc 表名

修改表
添加列(add),修改列(modify),修改列名(change),删除列(drop),修改表名(rename),修改表的字符集

添加列(add)  alter table 表名 add 列名 列名类型

--添加手机号

alter table emp1 add phone int; 

修改列(modify) alter table 表名 modify 列名 列的类型

--修改手机号的列的类型为字符类型

alter table emp1 modify phone varchar(11);

修改列名(change)  alter table 表名 change 旧的列名 新列名 列的类型

--修改phone 改成 shoujihao

alter table emp1 change phone shoujihao varchar(11);

删除列(drop) alter table 表名 drop 列名;

--删除shoujihao这列数据

alter table emp1 drop shoujihao;

修改表名(rename) rename table 旧表名 to 新表名

rename table emp1 to emp11;

修改表的字符集 alter table character set 字符集

alter table emp11 character set gbk;

删除表
drop table 表名

drop table emp11;

Sql完成对表中数据的CRUD的操作

插入数据
create table emp1(

    empno int primary key auto_increment,

    ename varchar(20),

    sal   double,

    deptno int

);

--指定列名插入

insert into emp1(empno,ename) values(9527,'huaan');

insert into emp1(empno,ename) values(null,'zhangsan');

--不指定列名插入:必须按照顺序,把表中所有的列的数据都填上,如果不填必须填null

insert into emp1 values(null,'lisi',18,10);

insert into emp1 values(null,'lisi');  --错误的写法,列的数量不匹配

insert into emp1 values(null,'李四',18,10);

删除记录
delete from 表名 [ where 条件 ]

delete from emp1; --逐条删除数据

--删除9527这个员工

delete from emp1 where empno=9527;

--面试问题: 请说一下 delete 删除表中所有数据 和 truncate 删除表中所有数据有什么差别

delete : DML(操作数据的) 一条一条删除表中记录

truncate : DDL(操作结构) 先删除表,再创建表

    --如果数据量少,delete 执行效率高

    --如果数据量大,truncate执行效率高

delete from emp1 where empno=9527;

delete from emp1 where empno=9527;

delete from emp1 where empno=9527;

delete from emp1 where empno=9527;

更新表记录
update 表名 set 列名=列的值,列名2=列的值2  [where 条件]

update emp1 set ename='张三' where empno=9528;

update emp1 set sal = 1000; --没有指定条件,全部修改

查询记录
--准备一张商品分类表(分类ID,分类名称,分类描述)
create table category(
	cid int primary key auto_increment,
  	cname varchar(10) not null,
    cdesc varchar(100)
);
--准备一张商品表(商品编号,商品名称,商品价格,商品描述,商品分类编号)
create table product(
	pid int primary key auto_increment,
  	pname varchar(10) not null,
  	price double,
  	pdesc varchar(20),
	cno int
);
--数据的准备
insert into category values(null,'手机数码','中国生产的小手机');
insert into category values(null,'鞋靴箱包','中国生产的包包');
insert into category values(null,'香烟酒水','黄鹤楼,茅台');
insert into category values(null,'馋嘴零食','卫龙辣条,周黑鸭');
insert into product values(null,'锤子',2999,'可以砸榴莲的手机',1);
insert into product values(null,'小米',1599,'为发烧而生',1);
insert into product values(null,'李宁',99,'不走寻常路',2);
insert into product values(null,'耐克',399,'just do it',2);
insert into product values(null,'黄鹤楼',20,'饭后一根烟,胜做活神仙',3);
insert into product values(null,'卫龙辣条',5,'卫龙辣条加料不加价',4);
insert into product values(null,'老干妈辣椒酱',9,'永远不变的味道',4);
insert into product values(null,'老干娘辣椒酱',19,'永远不变的味道',4);
insert into product values(null,'黄鹤楼',null,'饭后一根烟,胜做活神仙',3);

查询语句的基本结构:
	select [distinct] [列名,列名] * from 表名 [where 条件]
只是影响查询结果

--简单查询:
---查询所有商品信息:
	select * from product;
---查询商品名称和商品价格:
	select pname,price from product;
	
---别名查询. as 的关键字 , as 关键字是可以省略    张三  小三
	--表别名: select p.pname , p.price from product p; (主要是用在多表查询);
	select pro.* from product pro;
	select pro.pname from product as pro;
			
	--列别名:  select pname as 商品名称,price as 商品价格 from product;
	select pro.pname as 商品名称 from product as pro;
	select * from product;

---去掉重复的值 distinct
	--查询商品所有的价格
 select cno from product;
 select distinct cno from product;
 select distinct pname,cno from product;

--select运算查询 : 仅仅在查询结果上做了运算 + - * /
select pname,price*0.75 折后价 from product;
select 1+1; --mysql里面可以这样写

--条件查询 [where关键字] : 查询表中符合条件的数据
where 列名 条件
--关系/比较运算符: > >= = < <= != <>
 != : SQLserver
 <> : 标准SQL中不等号
--注意: null值: 代表的是不确定的,未知的,不可预知的内容,不能使用关系运算符
--逻辑运算: and , or , not
--其它运算符:
	is null
	is not null
	in (集合)
	between..and..

javascript的组成: ESMAScript bom dom

mysql oracle sqlserver
普通话 : SQL标准里面定义 锤子
方言 : 特有的语法   锤子

--查询商品价格>60元的所有商品信息
select 显示的列名 from 表名 where 查询条件
select * from product where price > 60;
	
-- where 后的条件写法
	
	--查询商品价格不等于99的所有商品
	select * from product where price <> 99;
	select * from product where price != 99;
	--查询出商品价格不为null的所有商品
	select * from product where price !=null;(错误的写法)
	select * from product where price is not null;
	select * from product where price is null;
	-- 查询商品价格在10 到 100之间
	select * from product where price >=10 and price <=100;
	select * from product where price between 10 and 100;
	--数学区间写法: [10,100] 
	---错误写法: select * from product where price between 100 and 10;

	--查询出商品价格 小于35 或者商品价格 大于900
	select * from product where price <35 or price >900;
	
	--like: 模糊查询  
		%  匹配多个字符
		_  匹配单个字符

	-- 查询出名字中带有辣的所有商品:    %辣%  
	select * from product where pname like '%辣%';	
		
	-- 查询出名字第三个字是辣字的所有商品信息
	select * from product where pname like '__辣%';	
		
	-- in 判断值是否在某个集合/范围   in(1,3,4)
		--查询出商品分类ID在 1,3,4里面的所有商品
		select * from product where pid in(1,3,4); 

delete from product where pid=10;
--排序查询: order by 关键字
	升序: asc   ascend  默认是升序
	降序: desc  descend
	--0. 查询所有商品,按照价格进行排序
	select * from product order by price;	
	--1.查询所有的商品,按价格进行降序排序 (asc-升序  desc-降序);
	select * from product order by price desc;	
	--2.查询名称有 辣 的商品,按价格升序
	  --1.找到有 辣的商品
	 select * from product where pname like '%辣%';
		--2.排序
	select * from product where pname like '%辣%' order by price asc;
--聚合函数:
	sum() 求和  avg()求平均值 count()统计个数 max() min()
	--1.获得所有商品价格的总和: 
	select sum(price) from product;
	--2.获得所有商品的平均价格: 
	select avg(price) from product;
	
	--3.获得所有商品的个数: 
	select count(pid) from product;
	select count(*) from product;
	
	select 1 from product;
	select count(1) from product; --写常量,比较高效

	--注意: where 条件后面不能接聚合函数 having 后面可以加

--分组: group by
	select 分组的条件,分组之后的操作 from 表名  group by 分组条件 having 条件;
	--1.根据cno字段分组,分组后统计商品的个数
	select cno,	count(*) from product group by cno;
		
	--分组之后的条件过滤: having
	--2.根据cno分组,分组统计每组商品的平均价格 并且商品平均价格 > 60
	select cno, avg(price) from product group by cno ;
	select cno, avg(price) from product group by cno having avg(price) > 60;		
	
-- 编写顺序
--  S..F..W..G..H..O
	select 显示的内容.. from 表名.. where 条件.. group by 分组条件 having 条件过滤 order by 排序
-- 执行顺序
	F..W..G..H..S..O
	from ... where .. group by ... having ...select...order by


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值