Mysql笔记(一)

MYSQL的SQL的语句

SQL:Structure Query Lauguage 结构化查询语言
DDL:数据定义语言:定义数据库,数据表他们的结构:create(创建) drop(删除) alter(修改)
DML:数据操纵语言:主要是用来操作数据 。insert(插入) update (修改) delete(删除)
DCL:数据控制语言:定义访问权限,取消访问权限,安全设置 grant
DQL:数据查询语言:select(查询) from 子句 where 子句

数据库的CRUD的操作

登录账号密码均为 root 的数据库服务器 : mysql -uroot -proot

创建数据库
 create database 数据库名字;
 create database mysqldb;

 create database 数据库名字 character set 字符集;
 create database mysqldb character set utf8;

 create database mysqldb character set utf8 collate utf8_bin;
查看数据库
 --查看数据库定义的语句
 show create database 数据库的名字
 show create database mysqldb;

--查看所有的数据库
show databases;
修改数据库的操作
 --修改数据的字符集
 alter database 数据库的名字 character set 字符集
 alter database mysql charecter set gbk;
删除数据库
 drop database 数据库的名字;
 drop database mysqldb;
其他数据库的操作命令
 --切换数据库
 use 数据库的名字
 use mysqkdb2;
 ---查看当前正在使用的数据库
 select database();

数据库中表的CRUD的操作

创建表
 create table 表名(
   列名1 列的类型(长度) 约束,
   列名2 列的类型(长度) 约束
 );
列的类型
java              sql
int 		   int 
char/String    char/varchar
               char :固定长度
               varchar:可变长度
               char(3): 1     存储时 1空格空格
               varchar(3):1   存储时 1
double         double  
float          float
boolean        boolean
date           date :YY-MM-DD
			   time:HH:MM:SS
			   datetime : YY-MM-DD HH:MM:SS 默认值为:null
			   timestamp:  YY-MM-DD HH:MM:SS 默认值为:使用当前时间      
列的约束
  列的约束:
  		主键约束:primary key
  		唯一约束:unique
  		非空约束:not null

案列:1.分析实体 :学生

   学生 ID
   姓名
   性别
   年龄
   create table student(
	sid int primary key,
	sname varchar(10),
	set int,
	age int 
	);
删除表
 drop table heima;

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

插入数据
insert into 表名(列名1,列名2,列名3) values(1,值2,值3);
inset into student(sid ,sname ,sex ,age) values (1,'aodi1',1,23);

简化的写法
insert into 表名 values(值1,值2,值3);
insert into student values (2,'aodi2',1,23);

注意:
inset into student(sid ,sname ) values (1,'aodi');
insert into student values (2,'aodi'); //这种写法是 错误的,

--批量插入
insert into student values 
(4,'aodi2',1,23),
(5,'aodi2',1,23),
(6,'aodi2',1,23);

注意:批量插入的效率比分别插入3条数据的效率高。但是若有一条数据错误,
	 批量插入会报错,全部的数据都不能插入,而分别插入 则只有错误的数据失败。
命令行插入中文问题:insert into student values(11,“李四”,1,24);

原因:
在这里插入图片描述
解决方案:
临时解决方案 :set names gbk ;相当于时高速mysql 服务器软件,我们当前在命令行下输入的内容是
GBK编码,当命令窗口关闭之后,它再输入中文就会存在问题。
永久解决方案:修改 my.ini 配置文件(再mysql 软件的安装路径里)utf8改成gbk
在这里插入图片描述

  1. 暂停mysql的服务
  2. 再mysql安装路径中找到myini 配置文件
  3. 将57 行的编码改成gbk,保存
  4. 重新启动mysql
删除记录
 delete from 表名 [where 条件]
 delete from student where sid = 10;
 delete from student; 如果没有指定表中数据,将一条一条 全部删除掉表中数据。

 --面试题:请说 delete 和 truncate 删除数据有什么区别
  delete : DML  一条一条删除表中的数据
  truncate : DDL 先删除 表 再重建表
  如果 表中数据量少 ,delete 比较高效
  如果 表中数据量多 ,truncate 比较高效

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

update student set sname = '历史' where sid =5;
查询表记录
 select [distinct][*][列名,列名2] from 表名 [where 条件]
 distinct : 去除重复的数据
select * from from student ; 查询学生的信息

对表中数据的多种需求查询

--创建新表:商品表 
			商品ID
			商品名称
			商品价格
			时间
			商品分类ID
create table product(
	pid int primary key auto_increment,
  	pname varchar(10),
  	price double,
  	pdate timestamp,
  	cno int
);

insert into product values(null,'小米mix4',998,null,1);
insert into product values(null,'锤子',2888,null,1);
insert into product values(null,'阿迪王',99,null,2);
insert into product values(null,'老村长',88,null,3);
insert into product values(null,'劲酒',35,null,3);
insert into product values(null,'小熊饼干',1,null,4);
insert into product values(null,'卫龙辣条',1,null,5);
insert into product values(null,'旺旺大饼',1,null,5);


 1. 查询所有的商品 select * from product;
 2. 查询商品的名称和商品价格  select pname , price from product;
 3. 别名查询 as 关键字 可省略。 
 	表别名:select p.pname ,p.price from product as p;主要用于多表查询
 	列别名:select pname [as] 商品名称,price  商品价格 from product ;
 4.  去掉重复值,查询商品所有的价格:select distinct price from product;
 5. select 运算,仅在查询中做了运算。
 	查询 8 折 商品:select pname , price*0.8 as 折后价 from product;
 
 --条件查询[where关键字]  指定条件,确定要操作的记录
 
 6. 查询商品价格 大于60元商品 select * from product where price>60;
 7. 查询商品价格 不等于66元商品 
 		--关系运算符 : > >=  <= = != <>
 		select * from product where price <>66; <> 不等于 :标准sql 语法
 		select * from product where price !=66; != 不等于 :非标准sql语法
 8.  查询商品再 10100 之间 
 	select * from product where price > 10 and price < 100;
 	select * from product where price between 10 and 100;
 	
 	---逻辑运算:and or not
 9. 查询商品价格 小于10 和 大于100元商品 
	select * from product where price < 10 or price > 100;
	   --like : 模糊查询 
			_ : 代表的是一个字符
			%:代表多个字符
 10. 查询出名字中带有饼的所有商品 select * from product where pname like '%饼%';
  11. 查询出名字中第二个字是熊的所有商品 select * from product where pname like '_熊%';
 	   --  i n 在某个范围中获得值
 12. 查询出商品分类ID 在1,4,5 里面的所有商品 select * from product where cno in (1,4,5);
        --  排序查询 : order by 关键字
    asc : ascend 升序 (默认的排序方式)
    desc:descend 降序
13.查询 所有的商品 铵价格进行排序 select * from product order by price;
14.查询所有的商品,铵价格进行降序排序 select * from product order by price desc
15. 查询名称带小的商品 ,铵价格进行升序 
		select * from product where pname like '%小%' order by price asc;
		
		---聚合函数:
			sum():求和
			avg():求平均值
			count():统计数量
			max():最大值
			min():最小值
16.  获得 所有商品价格的总和  select sum(price) from product :
17. 获得所有商品的平均价格    select avg(price) from  product;
18. 获得所有商品的个数            select count(*)  from product;
  
      --注意:where 条件 后面不能接聚合函数
19. 查询商品价格大于平均价格的所有商品
  --错误写法:select * from product where price > avg(price);
  --正确写法:select * from product where price >(select avg(price) from product);

	--分组:group by
20. 根据cno字段 分组,分组后统计商品的个数
	select cno,count(*) from product group by cno;
细解 group by

select * from product;
在这里插入图片描述
—select * from product GROUP BY cno;
在这里插入图片描述
select cno 分组编号,COUNT(*) from product GROUP BY cno;
在这里插入图片描述

	-- having 关键字 可以接 聚合函数  出现再分组 之后
	-- where 关键子 它是不可以 接聚合函数 ,出现再分组之前
21.  根据cno字段 分组,分组统计每组商品的平均价格 并且商品平均价格  > 60
  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..

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值