Mysql 进阶操作
将已经存在表设置自动增长属性
alter table student change id id int not null auto_increment primary key;
(注:这个地方一定是原来就是自动增长的或者原来就一条记录,并且id值为1)
mysql查询其中分数最高的人名,我摸索出来一个方法,如下:
mysql> select name from student a where a.english>=(select max(english) from student b);
参照:http://zhidao.baidu.com/question/100646012.html
在qq群里面讨论,一个网友提出了这个:
select top 1 name from student order by english desc;但是mysql中不知道top,不知道在哪个数据库中可以运行。
下面是一些mysql的进阶操作方法:
在select中使用排序
1.跟列名
select * from student order by chinese;
select * from student order by chinese desc;
2. 别名
举例:按照学生的总分进行排序
select name, chinese+english+math 总分 from student order by 总分 desc;
3.序号
举例:按照学生的总分进行排序
select name, chinese+english+math 总分 from student order by 2 desc;
练习:
对数学成绩排序后输出。
select * from student order by math;
对总分排序后输出,然后再按从高到低的顺序输出
select name, chinese+english+math 总分 from student order by 2 desc;
对姓李的学生总成绩排序输出
select * from student where name like '李%' order by (chinese+english+math);
合计函数-count(Oracle中叫组函数)
统计一个班级共有多少学生?
select count(*) from student;
select count(id) from student;
扩展:对于null值:count(列名)会自动滤空
统计数学成绩大于90的学生有多少个?
select count(*) from student where math>=90;
统计总分大于250的人数有多少?
select count(*) from student where chinese+english+math>250;
sum函数:
统计一个班级数学总成绩?
select sum(math) from student;
统计一个班级语文、英语、数学各科的总成绩
select sum(chinese) 语文总成绩,sum(english) 英语总成绩,sum(math) 数学总成绩 from student;
统计一个班级语文、英语、数学的成绩总和
select sum(chinese)+sum(english)+sum(math) 全班总分 from student;
统计一个班级语文成绩平均分
select sum(chinese)/count(*) from student;
select avg(chinese) from student;
avg函数:
求一个班级数学平均分?
select avg(math) from student;
求一个班级总分平均分
select avg(chinese+english+math) 平均分 from student;
max和min函数
求班级总分最高分和最低分(数值范围在统计中特别有用)
select max(chinese+english+math) 最高分, min(chinese+english+math) 最低分 from student;
分组函数: group by
按系统计学生的总成绩
select deptname,chinese+english+math from student group by deptName;
过程:先根据系名将同一系的学生分到一起,然后再对同组进行计算
扩展:按系统计学生的平均成绩
select avg(chinese+english+math) from student group by deptname;
例如:
select a,b,avg(c) from table group by a,b
语法要求:如果在select语句中,使用了合计函数,则select中未包含在合计函数中的列,都必须出现在group by后.
按系统计学生的总成绩,并且查询出总成绩大于250分的记录
问题:要对分组后的结果,再进行筛选
select deptname,sum(chinese+english+math) from student group by deptName having sum(chinese+english+math)>250;
如果group by作用于多列:
group by a,b ?? group by增强: group by rollup(a,b)
时间和日期函数:
select now() 当前时间, addtime(now(),'01:00:00') 一小时后
当前日期和当前的时间:
select current_date(), current_time();
一年后:
select now(), date_add(now(), INTERVAL 1 year) 一年后;
一年前:
select date_sub(now(), INTERVAL 1 year) 一年前 ;
返回两个时间相差的天数:
select datediff('2011-08-02','2010-09-12');
返回时间的年,月,日
select year(now()) 年, month(now()) 月, day(now()) 日;
字符串函数:
charset:返回字符集
select charset('hello world');
concat: 字符串连接函数
select concat('Hello',' World');
扩展:oracle中:连接符 ||: select 'Hello'||' World' from dual;
instr:在主串中查询子串的位置
select instr('Hello World','ll');
UCASE,LCASE
select ucase('hello world'),lcase('HELLO WORLD');
扩展:oracle,initcap:每个单词的首字母大写
left函数:
select left('Hello World',3);
length:求字符串的长度
select length('Hello World');
对于中文:字符数和字节数? "中国" length和lengthb
replace:替换函数
select replace('hello world','l','a');
对字符串进行比较
select strcmp('abc','abc'), strcmp('abcd','abc'),strcmp('abc','abcd');
求子串:
select substring('hello world',3),substring('hello world',3,3);
数值函数:
abs:绝对值
select abs(1),abs(-1);
bin:求二进制:
select bin(15);
向上取整和向下取整
select ceiling(10.12),floor(10.12);
扩展:四舍五入: round
截断?: trunc
hex: 十进制转十六进制
select hex(1125);
least:求参数列表中的最小值
select least(10,4,1,90);
表的约束:
1. 主键: 如果某列的值可以唯一标识该行,这列就为该标的主键
*. 不能为null
*. 不能重复
举例: 创建一个person1表
create table person1(
id varchar(18) primary key,
name varchar(10)
);
2. 定义主键自动增长:auto_increment
create table person2(
id int primary key auto_increment,
name varchar(10)
);
扩展:Oracle中使用序列,完成类似的功能
3. 定义唯一约束:unique
create table person3(
id int primary key auto_increment,
name varchar(20),
email varchar(20) unique
);
4. 定义非空约束;not null
create table person4(
id int primary key auto_increment,
name varchar(20) not null,
email varchar(20) not null unique
);
5. 外键:两张表的关系:
父表:
子表:外键指向了父表中的主键
部门表:父表
create table department(
deptno int primary key auto_increment,
dname varchar(20) not null unique,
loc varchar(20) not null
);
员工表:子表:
create table employees(
empno int primary key auto_increment,
ename varchar(20) not null,
email varchar(20) not null unique,
salary double not null,
deptno int,
constraint emp_dept_FK foreign key(deptno) references department(deptno)
);
插入数据:必须现有父记录,后有子记录
父记录:
insert into department(dname,loc) values('开发部','北京');
insert into department(dname,loc) values('行政部','北京');
子记录
insert into employees(ename,email,salary,deptno) values('Tom','tom@126.com',1000,1); 对
insert into employees(ename,email,salary,deptno) values('Mike','mike@126.com',1000,3); 错
更新操作:
update employees set deptno=2 where empno=1; 对
update employees set deptno=3 where empno=1; 错
删除:
delete from department where deptno=2;
办法:1. 先删除子表中的记录,在删除父表记录
2. 将子表中的外键列置为null,再删除父表记录(前提:该列没有定义not null)
6. check约束
多表操作:
1. 笛卡尔集
2. 多表查询:显示员工信息(包含部门名称)
select e.empno,e.ename,e.salary,d.dname from department d, employees e where d.deptno=e.deptno;
连接操作:
1. 等值连接
2. 不等值连接
3. 外连接
4. 自连接
3.java和数据库中多表的存储
使用mysql中的mysqldump命令(window 命令):
闪回:Oracle特有的技术
Mysql 进阶操作的更多相关文章
- mysql进阶(二十九)常用函数
mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...
- mysql进阶(二十八)MySQL GRANT REVOKE用法
mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执 ...
- mysql进阶(二十六)MySQL 索引类型(初学者必看)
mysql进阶(二十六)MySQL 索引类型(初学者必看) 索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型. 在数 ...
- mysql进阶(十六)常见问题汇总
mysql进阶(十六)常见问题汇总 MySQL视图学习: http://www.itokit.com/2011/0908/67848.html 执行删除操作时,出现如下错误提示: 出现以上问题的原因是 ...
- 【转】MySQL— 进阶
[转]MySQL— 进阶 目录 一.视图 二.触发器 三.函数 四.存储过程 五.事务 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需 ...
- MySQL进阶(视图)---py全栈
目录 mysql进阶(视图)---py全栈 一.什么是视图? 二.视图的特性 三.视图的优点 四.使用场合 五.视图基本操作 六.案例 mysql进阶(视图)---py全栈 一.什么是视图? 视图是从 ...
- Django 之models进阶操作
到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 ...
- MySQL基础操作(一)
MySQL操作 一.创建数据库 # utf CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # gbk CREA ...
- MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子
/*MySQL进阶19 函数 存储过程和函数:都类似于java中的方法; 存储过程和函数通用好处: 1.提高代码的重用性 2.简化操作 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数, ...
随机推荐
- hairline!ios实现边框0.5px
在2014WWDC上,Ted O’Connor提出了“retina hairlines”的解决方案,即在ratina屏幕上可以显示0.5px宽度的边框.他的方案是这样的: 1 Standard bor ...
- Form Post
1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的 ...
- 如何取消Linux下,vi中显示的^M符号
http://www.cnblogs.com/dkblog/archive/2012/02/03/2337187.html dos2unix file_name bash: ./configure: ...
- Android用户界面 UI组件--AdapterView及其子类(一) ListView及各种Adapter详解
ListView就是列表组件,一般通过继承ListActivity使用系统提供的ListView. 所有的AdapterView组件都需要有一个对应的Adapter作为适配器来显示列表中元素的布局方式 ...
- UNDO表空间损坏,爆满,ORA-600[4194]/[4193]错误解决
模拟手工删除UNDO表空间 在ORADATA 中把UNDOTBS01.DBF 删除 模拟启库 SQL> STARUP; * 第 1 行出现错误: ORA-01157: 无法标识/锁定数据文件 2 ...
- IPV6 实现
看代码实现前,请先保证了解ipv6的概念,可以先看ipv6介绍一文.code extract . 在文件 net/ipv6/af_inet6.c 中包含了ipv6协议初始化的主函数. static i ...
- WordPress Videowall插件‘page_id’参数跨站脚本漏洞
漏洞名称: WordPress Videowall插件‘page_id’参数跨站脚本漏洞 CNNVD编号: CNNVD-201310-502 发布时间: 2013-10-23 更新时间: 2013-1 ...
- [C#]网络编程系列专题二:HTTP协议详解
转自:http://www.cnblogs.com/zhili/archive/2012/08/18/2634475.html 我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网 ...
- (转载)最黑的黑客米特尼克:多次耍FBI 终被高手擒
(转载)http://bbs.chinabyte.com/thread-816847-1-1.html 凯文·米特尼克 50岁 第一个被FBI通缉的黑客,被称为“头号电脑骇客”,曾入侵北美防空指挥系统 ...
- python 零散记录(七)(上) 面向对象 类 类的私有化
python面向对象的三大特性: 多态,封装,继承 多态: 在不知道对象到底是什么类型.又想对其做一些操作时,就会用到多态 如 'abc'.count('a') #对字符串使用count函数返回a的数 ...