数据库第三天
一、例句
//有重名的人
select name from staff group by name having count(name)>1;
//重名人的-->姓名和个数
select name,count(name) from staff group by name having count(name)>1;
//重名人的所有信息
select * from staff where name in(select name from staff group by name having count(name)>1);
//显示前三名的成绩
select * from staff onder by score desc limit 3;//按成绩倒序,然后分页
//去除重名
select distinct name from student;
二、内联接-外联结-全连接(多表查询)
//添加主键
mysql> alter table employee add primary key(money);
//为表添加一个主键,如果主键已经存在,则出现错误
alter table 表名 add primary key(字段名);
//添加外键
alter table 表名 add foreign key(字段名) references 表名(字段名);
//主外键多表连接的等值连接与内联连接
//等值连接
select s*(s表的所有信息显示),d dname(d表的name字段显示) from student s(表的别名),dept d (表的别名)where d.did=s.did;
//内联连接
select * from student inner join dept on dept did=student did;
select s*,d dname,d salary from student s inner join dept d on d.did=s.did;
//左外联结 (LEFT JOIN)左边都显示,右满足条件显示,不满足条件显示位null
select s.*,d.dname from student s left join dept d on d.did=s.did ;
//右外联结 (RIGHT JOIN),右边都显示,左面满足条件显示,不满足条件显示位null
select s.*,d.dname from student s right join dept d on d.did=s.did ;
//全连接MySQL不支持 full join
//多表查询
1select * from dept,person;也叫笛卡尔积
2mysql> select * from dept,person where dept.id=person.bid;
3开发中一般使用等值查询
mysql> select id,bname,name,degree from person,dept where dept.id=person.bid;
注:多表查指定字段,最好用表名.字段名,如果多表中有重名字段则必须用表名.字段名
4 as 别名
mysql> select pid as 学号,name as 姓名,degree as 学历
,dept.bname from person,dept wheredept.id=person.bid;
三、复制表
1复制全部表内容
create table stu as select * from student;
2复制表中指定的字段及记录
create table stu as select Sname,Sage from student;
3只复制表字段
create table stu as select Sname,Sage from student where 0=1;
4复制表中字段及记录中的部份内容
create table login as select userid,username, substring(usercardid,13,6)as pass,islogin from userinfo;
5用户登录
select * fromlogin where username='mike' and pass='12412X' and islogin=1;
6取身份证后6位登录
mysql> select * from userinfo where username='刘能' and substring(usercardid,13,6)='121121';
7
select a.username发送人,b.senddate发送时间,c.username接收人,b.context信息内容from userinfo a,message b,userinfo c where a.userid=b.sendid and b.receiveid=c.userid and (c.username='张三丰' or c.username='所有人');
四、SQL语法组成
结构化查询语言(Structured Query Language)简称SQL
由3个部分组成
DML( Data Manipulation Language数据操作语言)
——查询、插入、删除和修改数据库中的数据;
——SELECT、INSERT、 UPDATE 、DELETE等;
DCL( Data Control Language数据控制语言)
——用来控制存取许可、存取权限等;
——GRANT、REVOKE 等;
DDL( Data Definition Language数据定义语言)
——用来建立数据库、数据库对象和定义其列
——CREATE TABLE 、DROP TABLE、ALTER TABLE 等
1 mysql> select now();2016-09-06 16:18:21
2mysql> select current_time(); 16:18:21
3 mysql> select current_date();
4mysql> select current_timestamp();2016-09-06 16:20:39
5mysql> select sysdate();2016-09-06 16:21:11
select * froeim 表名 limit (当前页-1)*记录数,记录数
五jdbc开发步骤
//数据库开发第1步 -->添加jar
//数据库开发第2步 -->加驱动
Class.forName("com.mysql.jdbc.Driver");
//数据库开发第3步 -->创建连接
String url="jdbc:mysql://localhost:3306/gongsi?useUnicode=true&characterEncoding=utf-8";//连接数据库地址
String user="root";//数据库用户名
String password="root";//数据库用户名
Connection conn=DriverManager.getConnection(url, user, password);
//数据库开发第4步 -->创建创建 Statement对象
Statement stm=conn.createStatement();
//数据库开发第5步 -->执行sql语句
String sql="insert into depart(b_name) values('"+bname+"')";
stm.executeUpdate(sql);
//数据库开发第6步 (对查询)-->执行sql语句 --> stm.executeQuery(sql)
//数据库开发第7步 -->关闭数据库连接,先关stm后关conn
stm.close();conn.close();