网站建设知识
MySQl之最全且必会的sql语句
2025-07-22 11:15  点击:0

MySQl之最全且必会的sql语句。

创建一个名称为mydb1的数据库,如果有mydb1数据库则直接使用,如果无则创建mydb1数据库  create database if not exists mydb1;  create database if not exists mydb1;  创建一个使用UTF8字符集的mydb2数据库,注意这里不是UTF-8  create database if not exists mydb2 character set UTF8;  create database if not exists mydb2 character set UTF8;  创建一个使用UTF8字符集,并带校对规则的mydb3数据库  create database if not exists mydb3 character set UTF8 collate utf8_general_ci;  校对规则:是数据库表中的所有记录按什么方式存储数据的先后顺序,例如:a在前,z在后  字符集与校对规则是一一对应,不能乱改  如果不写校对规则的话,默认是[对应字符集]默认的校对规则。参考<>  查看当前数据库服务器中的所有数据库  show databases;  查看前面创建的mydb1数据库的定义信息  show create database mydb1;  show create database mydb1;  删除前面创建的mydb1数据库,如果有mydb1则删除  drop database if exists mydb1;  drop database if exists mydb1;  使用mydb2数据库  use mydb2;  use mydb2;  查看数据库服务器中的数据库,并把其中mydb3库的字符集修改为GBK  alter database mydb3 character set GBK;  alter database mydb3 character set GBK;  以下代码是在mydb2数据库中创建users表,并插入几条记录,学员们暂时不用理会  create table if not exists users(      name varchar(10)  );  insert into users values('XX');  insert into users values('YY');  insert into users values('ZZ');  备份mydb1库中的数据到e:/xx.sql的文件中,以便将来恢复之用  window7(先exit到windows环境)备份:mysqldump -uroot -p mydb1 > e:\mydb1.sql回车                                      mysqldump -uroot -p mydb1 > d:/myydb1.sql  mysqldump是mysql提供的用于备份数据库的命令  mysqldump命令必须window环境运行  source命令中mysql环境运行  mysql恢复:source e:\mydb1.sql回车  注意:恢复时,[先创建数据库]并使用该数据库,[再]通过source命令,因为sql文件中[只有]表信息,[无]数据库信息  创建一个users表,包含id/username/password/birthday/salary  create table if not exists users(      id int(4),      username varchar(10),      password varchar(6),      birthday datetime,      salary float(6,2)  );  float(6,2)表示:2表示显示时小数点后最多几位,超过2位,四舍五入;                  6表示整数和小数最多几位,整数部份最多(6-2)位  以上表中的所有字段都允许为NULL,且默认NULL  如果数据显示出来是乱码,按如下步骤:  向users表中插入一条记录,先英后中(无法插入中文)  insert into users values(1,'jack','123456','2015-8-8 8:8:8',9999.99);  insert into users values(2,'哈哈','123456','2015-9-9 9:9:9',9999.99);  insert into users values(3,'呵呵','123456','2015-7-7 7:7:7',7777.77);  查询users表的结构  desc users;  创建employees表------------------------------用employees.sql表  在上面员工表的基本上增加一个image列  alter table employees  add image blob;  alter table employees add image blob;  企业中,不是真真正正存照片本身,而是存照片路径,即E:/zgl.jpg"">后面可以跟如下内容:  1)字段     order by math desc  2)表达式     order by (math+chinese+english) desc  3)别名(这个别名可以不加引号)     select name "姓名",math+chinese+english "总分"     from students     order by 总分 desc;  4)列号,即列在select中出现的位置,从1开始排序     select name "姓名",math+chinese+english "总分"     from students     order by 2 desc;  对姓'李'的学生总分排序(降序)输出  select name "姓名",(chinese+math+english) "总分"  from students  where name like '李%'  order by 2 desc;  --  select name "姓名",(chinese+math+english) "总分" from students where name like "李%" order by 2 desc;  查询数学分为NULL的学生  select name,math  from students  where math is null;  select name,math from students where math is null;  select name,math  from students  where math is not null;  还有not in,not between and,is not  -------------------------------------------------------------------------------------------------------  统计函数:统计函数会把null值得排除掉  统计一个班级共有多少学生  select count(*) "总人数"  from students;  select count(*) "总人数" from students;  不提倡用*号,而用非NULL唯一列,即id(主健)  select count(id)  from students;  select count(id) from students;  select count(math)  from students;  建议不要统计含有NULL的列值  统计数学成绩大于80的学生有多少个  select count(id)  from students  where math>80;  select count(id) from students where math>80;  统计总分大于250的人数有多少  select count(id)  from students  where (math+chinese+english)>250;  -----  统计一个班级数学总成绩  select sum(math) "数学总成绩"  from students;  select sum(math) "数学总成绩" from students;  统计一个班级语文、英语、数学各科的总成绩  select sum(math) "数学总成绩",sum(english) "英语总成绩",sum(chinese) "语文总成绩"  from students;  统计一个班级语文、英语、数学的成绩总和  select sum(chinese+math+english) "总成绩"  from students;  ------  统计一个班级语文成绩平均分  select avg(chinese) "语文平均分"  from students;  select avg(chinese) "语文平均分"  from students;  求一个班级数学平均分  select avg(math) "数学平均分"  from students;  求一个班级总分平均分  select avg(math+chinese+english) "班级总分平均分"  from students;  求班级最高分和最低数学分数  select max(math) "数学最高分",min(math) "数学最低分"  from students;  回顾:  count()   统计总数  sum()     求和  avg()     平均  max()     最值  min()  -------------------------------------------------------------------------------------------------------  orders表:  drop table if exists orders;  create table if not exists orders(      o_id int,      o_product varchar(20),      o_price int  );  insert into orders values(1,'电视',900);  insert into orders values(2,'洗衣机',100);  insert into orders values(3,'洗衣粉',90);  insert into orders values(4,'桔子',10);  insert into orders values(5,'洗衣粉',80);  对订单表中商品归类后,显示每一类商品的总价------------------------------用orders.sql表  select o_product "商品",sum(o_price) "总价"  from orders   group by o_product;  查询购买了几类商品,并且每类总价大于100的商品,即分类后,还要过滤  select o_product "商品",sum(o_price) "总价"  from orders   group by o_product  having sum(o_price) > 100;  小结:  where:  行过滤器  针对原始记录,即没有分组的记录  可以不出现  通常出现在where后面  先执行where  having:  组过滤器  针对分组后的记录  可以不出现  通过出现在group by 后面  后执行having  查询购买了几类商品,并且每类总价大于100的商品,同时按照总价的降序排列  select o_product "商品",sum(o_price) "总价"  from orders   group by o_product  having sum(o_price) > 100  order by 2 desc;  小结:  select子句  from 子句  where子句  group by子句  having子句  order by子句  在MySQL数据库服务器中,上面的所有子句,哪个是必须写的呢?  答:select