MySQl之最全且必会的sql语句
创建一个名称为mydb1的数据库,如果有mydb1数据库则直接使用,如果无则创建mydb1数据库create database if not exists mydb1;create database if not exists mydb1;创建一个使用UTF8字符集的mydb2数据库,注意这里不是UTF-8create 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在后字符集与校对规则是一一对应,不能乱改如果不写校对规则的话,默认是[对应字符集]默认的校对规则。参考<<mysql5手册--10.10.10>>查看当前数据库服务器中的所有数据库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库的字符集修改为GBKalter 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.sqlmysqldump是mysql提供的用于备份数据库的命令mysqldump命令必须window环境运行source命令中mysql环境运行mysql恢复:source e:\mydb1.sql回车注意:恢复时,[先创建数据库]并使用该数据库,[再]通过source命令,因为sql文件中[只有]表信息,[无]数据库信息创建一个users表,包含id/username/password/birthday/salarycreate 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 employeesadd image blob;alter table employees add image blob;企业中,不是真真正正存照片本身,而是存照片路径,即E:/zgl.jpg修改name列,使其长度为60alter table employeesmodify name varchar(60);alter table employeesmodify name varchar(60);删除image列alter table employeesdrop column image;alter table employeesdrop column image;如果表中有内容的话,删除或添加某列,不影响其它列的信息表名employees改为staffrename table employees to staff;rename table employees to staff;修改表的字符集为GBKalter table staffcharacter set UTF8/GBK/GB2312;列名name修改为usernamealter table staffchange column name username varchar(60);alter table staffchange column name username varchar(60);向staff表中插入数据insert into staff values(3,'赵君','男','2005-1-1',3333.33,'2005-7-1','这是备注信息');显示插入NULLinsert into employees values(1,'哈哈','男','2015-1-1',1111.11,'2015-5-5','这是备注信息',NULL);隐式插入NULLinsert into employees(id,name,sex,birthday,salary,resume) values(2,'呵呵','男','2015-1-1',2222.22,'这是备注信息');如果存在表就删除表drop table if exists staff;//表不在了drop table if exists staff;truncate table users;//表还在,只不过没有内容了再重新创建表create table staff( id int(5), name varchar(6), sal int(5));insert into staff values(1,'哈哈',7000);insert into staff values(2,'呵呵',8000);insert into staff values(3,'嘻嘻',9000);insert into staff values(4,'明明',10000);insert into staff(id,name,sal) values(4,'星星',6000);insert into staff(name,id,sal) values('月月',5,6000);----------------------------------------------------------------------------------------------------------------将所有员工薪水修改为10000元update staff set sal=10000;update staff set sal=10000;以上就是SQL语句的威力,如果发送命令,MySQL数据库服务器自行会解析其命令,并做相对应的过程处理,这个过程处理对程序员来讲,是封闭的,看不见。SQL的全称【结构化查询语句】,第四代计算机语言第一代:机器语言,即01010010100100101第二代:汇编语言,即用一个代号去表示10101010这些数字第三代:高级语言,即c/c++/vb/java/c#/...第四代:命令语言,即SQL第五代:智能语言,。。。 将姓名为'哈哈'的员工薪水修改为11000元update staff set sal=11000 where name = '哈哈';update staff set sal=11000 where name = '哈哈';将月月的薪水在原有基础上增加1000元update staff set sal = sal + 1000 where name = '月月';update staff set sal = sal+1000 where name = '月月';删除表中3号的记录delete from staff where id = 3;delete from staff where id = 3;删除表中所有记录delete from staff;delete它是一行一行删除,速慢较【慢 】 drop table staff;整个表都被删除了使用truncate删除表中记录truncate它是整表删除后再重构,速慢较【快】。但是它的表结构还在,知识表内容没了---------------------------------------------------------------------------------------------------------------students表use mydb1;drop table if exists students;create table if not exists students( id int(5), name varchar(20), chinese int(5), english int(5), math int(5));insert into students(id,name,chinese,english,math) values(1,'张小明',89,78,90);insert into students(id,name,chinese,english,math) values(2,'李进',67,98,56);insert into students(id,name,chinese,english,math) values(3,'王五',87,78,77);insert into students(id,name,chinese,english,math) values(4,'李一',88,98,90);insert into students(id,name,chinese,english,math) values(5,'李来财',82,84,67);insert into students(id,name,chinese,english,math) values(6,'张进宝',55,85,45);insert into students(id,name,chinese,english,math) values(7,'黄蓉',85,75,80);insert into students(id,name,chinese,english,math) values(8,'张一李',75,65,30);insert into students(id,name,chinese,english,math) values(9,'何李',75,65,30);insert into students(id,name,chinese,english,math) values(10,'单',75,65,30);insert into students(id,name,chinese,english,math) values(11,'李',75,65,NULL);insert into students(id,name,chinese,english,math) values(12,'jack',75,65,40);insert into students(id,name,chinese,english,math) values(13,'marry',75,65,60);查询表中所有学生的信息,*表示所有字段,顺序与表结构相同------------------------------用students.sql表select id,name,chinese,math,english from students;select name,id,chinese,math,english from students;select name,chinese,math,english,id from students;select * from students;*号虽然写好起来方便,但充满不确定因素,要慎用查询表中所有学生的姓名和对应的英语成绩select name,english from students;select name,english from students;过滤表中重复语文成绩distinct(区别的)放在单列名前面,可以对该列名重复你元素进行筛选,仅仅保留一个select distinct chinese from students;select distinct chinese from students;在所有学生分数上加10分特长分select name,chinese+10,math+10,english+10 from students;select name,chinese+10,math+10,english+10 from students;NULL与任何数值进行运算,结果为NULL统计每个学生的总分select name,chinese+math+english from students;select name,chinese+math+english from students;**使用(别名)表示学生分数,注意使用别名加上双引号select name "姓名",chinese+math+english "总分" from students;select name "姓名",chinese+math+english "总分" from students;查询姓名为'张小明'的学生成绩 注意字符串用单引号'' 条件用whereselect id,name,chinese,math,english from students where name = '张小明';select * from students where name = '张小明';查询英语成绩大于90分的同学select id,name,chinese,math,english from students where english > 90;select * from students where english>90;查询总分大于200分的所有同学select id,name,chinese,math,english from students where chinese+math+english > 200;查询数学分数为89或者90或者91的同学方式一:select name,mathfrom studentswhere (math=89) or (math=91) or (math=90);方式二:(推荐)select name,mathfrom studentswhere math in (91,89,90,100,10000);//即使加上一些不存在的值也没问题查询英语分数在 80-90之间的同学,包含80和90方式一:select name,englishfrom studentswhere (english>=80) and (english<=90);方式二:select name,englishfrom studentswhere english between 80 and 90;select name,english from students where english between 80 and 90;查询所有姓'李'的学生成绩,%表示0或多个字符(模糊查询)select name,english,math,englishfrom studentswhere name like '李%';select * from students where name like '李%';=表示精确比较模糊比较,like关键字查询所有名'李'的学生成绩select name,english,math,englishfrom studentswhere name like '%李';查询所有姓名中包含’李’的学生成绩select name,english,math,englishfrom studentswhere name like '%李%';以下三条SQL都表示查询表中的[所有]记录select name,english,math,englishfrom studentswhere name like '%';select name,english,math,englishfrom studentswhere name like '%%';select name,english,math,englishfrom studentswhere name like '%%%';查询所有姓'李'的学生成绩,但姓名必须是三个字符,_表示1个字符select *from studentswhere name like '李__';select * from students where name like '李__';查询数学分>80且语文分>80的同学select *from students where 1=1 and(math>80) and(chinese>80);select * from students where 1=1 and (math>80) and (chinese>80);---------------------------------------------对数学成绩排序(降序)后输出select id,name,mathfrom studentsorder by math desc;select id,name,math from students order by math desc;desc表示降序,排序字段用数值型select id,name,mathfrom studentsorder by math asc;asc表示升序,不写asc和desc默认是升序**对总分排序(降序)后输出SELECT name "姓名",math+chinese+english "总分"From studentsorder by (math+chinese+english) desc;select name "姓名",math+chinese+english "总分" from students order by (math+chinese+english) desc;扩展:通常<order by="">后面可以跟如下内容:1)字段 order by math desc2)表达式 order by (math+chinese+english) desc3)别名(这个别名可以不加引号) 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 studentswhere name like '李%'order by 2 desc;--select name "姓名",(chinese+math+english) "总分" from students where name like "李%" order by 2 desc;查询数学分为NULL的学生select name,mathfrom studentswhere math is null;select name,math from students where math is null;select name,mathfrom studentswhere 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 studentswhere math>80;select count(id) from students where math>80;统计总分大于250的人数有多少select count(id)from studentswhere (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_producthaving sum(o_price) > 100; 小结:where:行过滤器针对原始记录,即没有分组的记录可以不出现通常出现在where后面先执行wherehaving:组过滤器针对分组后的记录可以不出现通过出现在group by 后面后执行having查询购买了几类商品,并且每类总价大于100的商品,同时按照总价的降序排列select o_product "商品",sum(o_price) "总价"from orders group by o_producthaving sum(o_price) > 100order by 2 desc;小结:select子句from 子句where子句group by子句having子句order by子句在MySQL数据库服务器中,上面的所有子句,哪个是必须写的呢?答:select</order>MySQl之最全且必会的sql语句的更多相关文章
- 优化、分析Mysql表读写、索引等操作的sql语句效率优化问题
为什么要优化: 随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们 就需要做一个优化调整. 数据库优化这个课题较大,可分为四大类: >主 ...
- mysql(1)—— 详解一条sql语句的执行过程
SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...
- MySQL 笔记整理(18) --为什么这些SQL语句逻辑相同,性能却差异巨大?
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 18) --为什么这些SQL语句逻辑相同,性能却差异巨大? 本篇我们以三 ...
- MySQL查询不使用索引汇总 + 如何优化sql语句
不使用索引原文 : http://itlab.idcquan.com/linux/MYSQL/918330.html MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多 ...
- mysql详解常用命令操作,利用SQL语句创建数据表—增删改查
关系型数据库的核心内容是 关系 即 二维表 MYSQL的启动和连接show variables; [所有的变量] 1服务端启动 查看服务状态 sudo /etc/init.d/mysql status ...
- MYSQL批量修改表前缀与表名sql语句
修改表名 ALTER TABLE 原表名 RENAME TO 新表名; 一句SQL语句只能修改一张表 show tables; 1. SELECT CONCAT( 'ALTER TABLE ', ta ...
- MySql使用show processlist查看正在执行的Sql语句
今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...
- MySQL在ROW模式下通过binlog提取SQL语句
Linux基于row模式的binlog,生成DML(insert/update/delete)的rollback语句通过mysqlbinlog -v 解析binlog生成可读的sql文件提取需要处理的 ...
- mysql基础-- 一条请求执行多条SQL语句
最近做一个数据库初始化工具的时候发现了这个问题,就是在一个Statement中执行一条SQL语句的时候可以正确执行,如果同时执行多条,就会报SQL语法错误,伤透了脑筋. 经过网上查找,发现有两种解决办 ...
随机推荐
- Python爬虫基本原理
爬虫基本原理 1. 什么是爬虫 请求网站并提取数据的自动化程序. 2. 爬虫基本流程 发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待 ...
- 看漫画学Flux
原文地址:A cartoon guide to Flux - by Lin Clark Flux在目前web开发中最受欢迎也较不被人理解,本文会以简单易懂的方式解释它. 出现问题 首先,我要声明Flu ...
- AngularJS1.X学习笔记13-动画和触摸
本文主要涉及了ngAnimation和ngTouch模块,自由男人讲的比较少,估计要用的时候还要更加系统的学习一下. 一.安装 没错,就是酱紫. 二.玩玩动画 <!DOCTYPE html> ...
- Linux知识积累(6) 系统目录及其用途
linux系统常见的重要目录以及各个目作用:/ 根目录.包含了几乎所有的文件目录.相当于中央系统.进入的最简单方法是:cd /./boot引导程序,内核等存放的目录.这个目录,包括了在引导过程中所必需 ...
- 图数据库orientDB(1-1)SQL基本操作
SQL基本操作 1.新增VerTex CREATE VERTEX V SET name="user01",sex="M",age="25"; ...
- Spark入门(1-4)安装、运行Spark
如何安装Spark 安装和使用Spark有几种不同方式.你可以在自己的电脑上将Spark作为一个独立的框架安装或者从诸如Cloudera,HortonWorks或MapR之类的供应商处获取一个Spar ...
- java专业术语
java的(PO,VO,TO,BO,DAO,POJO)解释 PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了.通常对应数据模型 ...
- leetcode算法:Next Greater Element I
You are given two arrays (without duplicates) nums1 and nums2 where nums1's elements are subset of n ...
- Android 自定义控件高度设置onMeasure方法
最近使用hellocharts需要表格横向显示,而activity需要竖屏显示,在旋转以后,默认宽度为不超过屏幕宽度,则一直无法显示全控件. 此时需要修改onMeasure方法,这个方法是用来控制控件 ...
- oracle:批量插入不同方案对比
实时测试的速度: --48466条数据 --1.297 inline view更新法 inline view更新法就是更新一个临时建立的视图 update (select a.join_stateas ...