mysql和mysqla_mysql(连接查询和数据库设计)

news/2024/7/6 23:33:23

--创建学生表

create table students (

id int unsigned not null auto_increment primary key,

name varchar(20) default '',

age tinyint unsigned default 0,

high decimal(5,2),

gender enum('男', '女', '中性', '保密') default '保密',

cls_id int unsigned default 0,

is_delete bit default 0

);

--创建班级表

create table classes(

id int unsigned auto_increment primary key not null,

name varchar(20) not null

);

--往students表里插入数据

insert into students values

(0,'小明',18,180.00,2,1,0),

(0,'小玥玥',19,180.00,2,2,0),

(0,'彭于晏',28,185.00,1,1,0),

(0,'刘德华',58,175.00,1,2,0),

(0,'黄蓉',108,160.00,2,1,0),

(0,'凤姐',44,150.00,4,2,1),

(0,'王祖贤',52,170.00,2,1,1),

(0,'周杰伦儿',34,null,1,1,0),

(0,'程坤',44,181.00,1,2,0),

(0,'和珅',55,166.00,2,2,0),

(0,'刘亦菲',29,162.00,3,3,0),

(0,'金星',45,180.00,2,4,0),

(0,'静香',18,170.00,1,4,0),

(0,'郭静',22,167.00,2,5,0),

(0,'周杰',33,178.00,1,1,0),

(0,'钱小豪',56,178.00,1,1,0),

(0,'谢霆锋',38,175.00,1,1,0);

--向classes表里插入数据

insert into classes values (0, '云唯_01期'),(0, '云唯_02期');

-- 连接查询

-- inner join ... on

-- 两个表连接查询

select * from students inner join classes

-- 查询能够对应班级的学生以及班级信息

select * from students inner join classes on students.cls_id=classes.id;

-- 按照要求显示姓名,班级

select students.*, classes.name from students inner join classes on students.cls_id=classes.id;

-- 给数据表起名字

select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;

-- 查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称

select students.*, classes.name from students inner join classes on students.cls_id=classes.id;

-- 在以上查询中将班级姓名显示在第一列

select classes.name,students.* from students inner join classes on students.cls_id=classes.id;

-- 查询有能够对应班级的学生以及班级信息,按照班级进行排序

select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id;

-- 当是同一个班级的时候,按照学生的id从小到大

select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id, students.id;

-- 自关联

create table areas(

aid int primary key auto_increment,

name varchar(20),

pid int

);

-- 查询出河北省所有市

select * from areas as province inner join areas as city on province.aid=city.pid having name='河北省';

select province.name,city.name from areas as province inner join areas as city on province.aid=city.pid having province.name='河北省';

-- 子查询

-- 标量子查询

-- 查询出北京市所有区的信息

select * from areas where pid=(select aid from areas where name='北京市');

select * from areas where pid in (select aid from areas where name='北京市');

数据库设计

1.第一范式(确保每列保持原子性)

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

2.第二范式(确保表中的每列都和主键相关)

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

3.第三范式(确保每列都和主键列直接相关,而不是间接相关)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

1.1第一范式

10022440.html

NG1KVkdllKYiwpKSnZHSliLCkpKemkiLGkpKSkkyLGkpKSkk6KGEtKSko6KWIsKSkp6aSIsaSkpKSTIsaSkpKSTooYS0pKSjopYiwpKSnppIixpKSkpJMixpKSkpJOihhLSkpKOiliLCkpKemkiLGkpKSkkyLGkpKSkk6KGEtKSkouIMPwf0tMPJfC6j4KAAAAAElFTkSuQmCC

2.1第二范式

10022440.html

n7Lp6WHvlbi7Rmi1hpmPKu71lNeL8kwkRirtAnLI8IHbp9+yKkQpMaIvz6BKcbGlVXfKIFM7OtEdYiu+KBWdU6Lc9dptrptJxk7CP0KyVxTb3zaLX1hYZPC63vWU3YgmJdOYkwkZgb9AnLIsIMGTJkyJBh3kMSYYYMGTJkWNchiTBDhgwZMqzrkESYIUOGDBnWdUgizJAhQ4YM6zokEWbIkCFDhnUdkggzZMiQIcO6DkmEGTJkyJBhHYem+f+CwAn2BnUB2wAAAABJRU5ErkJggg==

3.1第三范式

10022440.html

ASuj88Aa5FW0AAAAAElFTkSuQmCC

最终实现的目标

10022440.html

Bz5RiRr9qksXLtDXXH4u3uQ3K6gWrUVBVS3uuPwzqBL9P0X4ZtlASBnlAAAAAElFTkSuQmCC

E-R模型

E-R模型的基本元素是:实体、联系和属性

E表示entry,实体:一个数据对象,描述具有相同特征的事物

R表示relationship,联系:表示一个或多个实体之间的关联关系,关系的类型包括包括一对一、一对多、多对多

属性:实体的某一特性称为属性

关系也是一种数据,需要通过一个字段存储在表中

1、实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值

10022440.html

b5mYSCRWLkgHsScSiURitoIksScSicQQgSSxJxKJxBChlFL+P+2gZ+BfOm6PAAAAAElFTkSuQmCC

10022440.html

2、实体A对实体B为1对多:在表B中创建一个字段,存储表A的主键值

10022440.html

qcUB7QAAAABJRU5ErkJggg==

10022440.html

3、实体A对实体B为多对多:新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值

10022440.html

7QAAAABJRU5ErkJggg==


http://www.niftyadmin.cn/n/1999123.html

相关文章

使用nginx作为websocket的proxy server

blog.csdn.net/zhx6044/article/details/50278765 WebSocket WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单。大部分现在的浏览器都支…

命名管道例子

Server: // CNamedPipeClientView 消息处理程序voidCNamedPipeClientView::OnNamedpipeConnect(){ // TODO: Add your command handler code hereif (!WaitNamedPipe("//./pipe/mypipe", NMPWAIT_WAIT_FOREVER)) { MessageBox("there is no usable…

mysql 全文索引 使用_MySql全文索引

使用索引是数据库性能优化的必备技能之一。在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX)。全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用「分词技术「等多…

php 数组排序 按照某字段

$arr[array(name>小坏龙,age>28),array(name>小坏龙2,age>14),array(name>小坏龙3,age>59),array(name>小坏龙4,age>23),array(name>小坏龙5,age>23),array(name>小坏龙6,age>21),];array_multisort(array_column($arr,age),SORT_DESC,$ar…

给同学的第一次工作的一封信

小伟、小杰、阿刚:你们好!看到你们对工作的热情真的好让我感动。这让我想到了去年和前年时暑假的我。满怀着激情和憧憬去找工作,去努力的发展自己,强大自己。这种感觉真好!开始工作是件很好的事情,是人生的…

mysql如何刷新内存_MySQL-脏页的刷新机制

MySQL内存结构-缓冲区MySQL的缓冲区中有数据页,索引页,插入缓冲等等,这个角度是从页的功能来分类的。本小节从另一个视角关注这些页,如果从 是否被修改过(和磁盘不一致) 这个角度来区分这些页,那么页可以被分为干净的页…

Android开发搭建环境所需要的各种包,不断更新中。。。

封装好的用于开发Android的ADT Bundle:32位版:adt-bundle-windows-x86-20140702.zip请添加链接描述(百度网盘) 64位版:adt-bundle-windows-x86_64-20140702.zip请添加链接描述(Google 地址) 提供了很多Android开发相关…

vc的dll基本用法

vc的dll基本用法 因为要用vc的dll,所以今天做了一些试验,还是有几点记录一下: 一.设置:1.预处理设置:如果有如下错误unexpected end of file while looking for precompiled header directive可以禁止预处理&#…