将已经存在表设置自动增长属性
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 进阶操作的更多相关文章

  1. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  2. mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法   MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执 ...

  3. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  4. mysql进阶(十六)常见问题汇总

    mysql进阶(十六)常见问题汇总 MySQL视图学习: http://www.itokit.com/2011/0908/67848.html 执行删除操作时,出现如下错误提示: 出现以上问题的原因是 ...

  5. 【转】MySQL— 进阶

    [转]MySQL— 进阶 目录 一.视图 二.触发器 三.函数 四.存储过程 五.事务 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需 ...

  6. MySQL进阶(视图)---py全栈

    目录 mysql进阶(视图)---py全栈 一.什么是视图? 二.视图的特性 三.视图的优点 四.使用场合 五.视图基本操作 六.案例 mysql进阶(视图)---py全栈 一.什么是视图? 视图是从 ...

  7. Django 之models进阶操作

    到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 ...

  8. MySQL基础操作(一)

    MySQL操作 一.创建数据库 # utf CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # gbk CREA ...

  9. MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子

    /*MySQL进阶19 函数 存储过程和函数:都类似于java中的方法; 存储过程和函数通用好处: 1.提高代码的重用性 2.简化操作 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数, ...

随机推荐

  1. 关于BootStrap下图标的显示问题

    我现在在做自己的毕业设计,用到了bootstrap的这一套css样式,说句心里话,这一套东西确实很好用,但是一个小问题足足浪费了我将近两个小时. 我的问题是:没有办法使用bootstrap下的图标(很 ...

  2. [BZOJ 3531] [Sdoi2014] 旅行 【离线+LCT】

    题目链接:BZOJ - 3531 题目分析 题目询问一条路径上的信息时,每次询问有某种特定的文化的点. 每个点的文化就相当于一种颜色,每次询问一条路径上某种颜色的点的信息. 可以使用离线算法, 类似于 ...

  3. BZOJ 1707: [Usaco2007 Nov]tanning分配防晒霜

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  4. 【2011 Greater New York Regional 】Problem B The Rascal Triangle

    一个简单的规律题,每一列都是一个等差数列: 代码: #include<cstdio> #define ll long long using namespace std; int main( ...

  5. 杂烩:QWidget、QGraphics、QtQuick

    一说起Qt 大都会想起Qt的GUI编程,具体到某个类的话,最多的就是QWidget类及其子类了. 其实Qt中还有基于项的图形视图,具体来说QGraphicsView,QGraphicsScene,QG ...

  6. 监控持有sql和被堵塞的sql

    Session 1: mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> update Client ...

  7. Automatic Code Generation-->Implement Interface

    https://msdn.microsoft.com/en-us/library/hk90416s(v=vs.110).aspx VS中自带的只能提示,一个类继承自某一个接口. 由VS为类生成接口所要 ...

  8. xmanager远程登录

  9. C#文本处理(String)学习笔记

    摘要:string是编程中使用最频繁的类型.一个string表示一个恒定不变的字符序列集合.string类型直接继承自object,故他是一个引用类型,也就是说线程的堆栈上不会有任何字符串(直接继承自 ...

  10. (转载)C++中将构造函数或析构函数定义为private

    (转载)http://www.blogjava.net/fhtdy2004/archive/2009/05/30/278971.html C++中将构造函数或析构函数定义为private 很多情况下要 ...