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.简化操作 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数, ...
随机推荐
- 关于Java(介绍)
基于Java官方指导文档,开展学习 Java是什么 Java 是编程语言,也是一个平台 特性 简单 可移植 面向对象 分布式运算高性能 健壮 安全 动态 体系结构中立 记忆宫殿:恋爱是件简单的事,但放 ...
- Entity Framework关联实体的三种加载方法
推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...
- JQ模仿select
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- INFORMATION_SCHEMA.INNODB_TRX 详解
从192.168.11.186 上登录 192.168.11.185 数据库: root 13246 547 0 13:39 pts/1 00:00:00 mysql -uroot -px xxxxx ...
- When to use DataContract and DataMember attributes?
When to use DataContract and DataMember attributes? I am very confused about the DataContract attri ...
- linux解压cpio.gz类型文件
1. gunzip XXX.cpio.gz –> 得到 XXX.cpio 文件 2. cpio -idmv <XXX.cpio –> 得到 XXX 文件夹
- Python 处理server返回gzip内容
Python 如何处理server返回gzip压缩过的内容,代码如下: from StringIO import StringIOimport gzip request = urllib2.Reque ...
- POJ_3280_Cheapest_Palindrome_(动态规划)
描述 http://poj.org/problem?id=3280 n 种小写字母构成长度为 m 的串,现在要通过增删字母使串回文,给出每种字母增和删的费用,求最小花费. Cheapest Palin ...
- android开发板
element14-beaglebone-black http://www.embest-tech.cn/shop/star/element14-beaglebone-black-rev-c.html ...
- 迷宫城堡--HDOJ 1269(Tarjan)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...