mysql数据类型和子查询

电脑的一个字节等于8位,也就是1Byte=8bit。
字节(Byte /bait/ n. [C])是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
bit中文名称是位,音译“比特”,是用以描述电脑数据量的最小单位。
计算机容量单位的换算关系是:
1Byte=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB,1PB=1024TB,1EB=1024PB,1ZB=1024EB,1YB=1024ZB

二进制转十进制

把各个为拆开。乘以2的次幂。末尾位乘2的0次幂。依次类推。

比如:10010111

十进制=1*2^7+0*2^6+0*2^5+1*2^4+0*2^3+1*2^2+1*2+1*2^0 ;

PS:末尾位是2的零次幂,所以是1。

字符与字节

字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。

UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。

Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节。

数据表:也就是建立列的过程,数据是以文件的形式放在硬盘(也有的放在内存中)

列:不同的列类型占得空间不一样;选列的原则:够用,又不浪费

列类型详解

数值型

整型

类型


大小


范围(有符号)


范围(无符号)


用途


TINYINT


1 字节


(-128,127)


(0,255)


小整数值


SMALLINT


2 字节


(-32 768,32 767)


(0,65 535)


大整数值


MEDIUMINT


3 字节


(-8 388 608,8 388 607)


(0,16 777 215)


大整数值


INT或INTEGER


4 字节


(-2 147 483 648,2 147 483 647)


(0,4 294 967 295)


大整数值


BIGINT


8 字节


(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)


(0,18 446 744 073 709 551 615)


极大整数值

整型的符号
在mysql中数字数据类型是有符号和无符号两种,当然整型也是,
在定义一个字段的时候可以这么使用
age tinyint unsigned,
unsigned代表是无符号,即都是大与等于0 的数
如果这样使用是默认有符号的
age tinyint ,


类型


大小


范围(有符号)


范围(无符号)


用途


TINYINT


1 字节


(-128,127)


(0,255)


小整数值


SMALLINT


2 字节


(-32 768,32 767)


(0,65 535)


大整数值


MEDIUMINT


3 字节


(-8 388 608,8 388 607)


(0,16 777 215)


大整数值


INT或INTEGER


4 字节


(-2 147 483 648,2 147 483 647)


(0,4 294 967 295)


大整数值


BIGINT


8 字节


(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)


(0,18 446 744 073 709 551 615)


极大整数值

整型的符号
在mysql中数字数据类型是有符号和无符号两种,当然整型也是,
在定义一个字段的时候可以这么使用

age tinyint unsigned,
unsigned代表是无符号,即都是大与等于0 的数

如果这样使用是默认有符号的
age tinyint ,

  1. 2.整型的数据宽度(即数据类型后的数字)和零填充

a. 数据宽度和数据类型的取值范围是无关的

b. 数据宽度只是指明MYSQL最大可能显示的数字个数,数值的位数小于M时会有空格填充;大于M时,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能显示出来

c. 数据宽度的效果需要配合zerofill使用

小数型

类型


大小


范围(有符号)


范围(无符号)


用途


FLOAT


4 字节


(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)


0,(1.175 494 351 E-38,3.402 823 466 E+38)


单精度
浮点数值


DOUBLE


8 字节


(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)


0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)


双精度
浮点数值


DECIMAL


对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2


依赖于M和D的值


依赖于M和D的值


定点小数值

浮点型的特点是小数点浮动,有精度丢失;定点型特点就是小数点固定,不会丢失精度。

单精度型能精确到七位,而双精度能精确到15位。用户在选用这些数据类型时,要注意变量所取值的范围。

记住以下几点: 1、浮点数存在误差问题; 2、对货币等对精度敏感的数据,应该用定点数表示或存储;

将id1,id2,id3的精度和标度都去掉

f和d的数据正确插入,而de被截断。

浮点数如果不写精度和标度,则会按照实际显示,如果有精度和标度,则会将数据四舍五入后插入,系统不报错,定点数如果不设置精度和标度,刚按照默认的(10,0)进行操作,如果数据超过了精度和标度值,则会警告!

同时,对数据求SUM()时会出现不同的结果,float和double求SUM都会出现很多小数点,而decimal求SUM得到的是精准数值:

理论上SUM(f)=3.698,SUM(d)=2.474,SUM(de)=3.46,但f,d都出现后面很长的一串浮点小数点。

字符型


类型


大小


用途


CHAR


0-255字符


定长字符串


VARCHAR


0-65535 字符


变长字符串


TINYBLOB


0-255字符


不超过 255 个字符的二进制字符串


TINYTEXT


0-255字符


短文本字符串


BLOB


0-65 535字符


二进制形式的长文本数据


TEXT


0-65 535字符


长文本数据


MEDIUMBLOB


0-16 777 215字符


二进制形式的中等长度文本数据


MEDIUMTEXT


0-16 777 215字符


中等长度文本数据


LONGBLOB


0-4 294 967 295字符


二进制形式的极大文本数据


LONGTEXT


0-4 294 967 295字符


极大文本数据

定长char与变长varchar的区别:

char定义的是固定长度,长度范围为0-255,存储时,如果字符数没有达到定义的位数,会在后面用空格补全存入数据库中,数据库取char的数据时,会把后面的空格全部丢弃掉。

varchar是变长长度,长度范围为0-65535,存储时,如果字符没有达到定义的位数,也不会在后面补空格,当然还有一或两个字节来描述该字节长度,而数据库在取varchar数据时,尾部空格会保留。
char (16)长度固定, 如‘www.uphtm.com‘ 存储需要空间 14个字符  实际占位16个字符 ,超过16个字符,会被截断

varchar(16) 可变长 如‘www.uphtm.com‘ 需要存储空间 15字符,     实际占位15个字符,超过16个字符,会被截断

==========================================================================================================================================

子查询

子查询的定义:

子查询是一个查询语句嵌套着另外的查询语句,用来进行一定层次的查询,其中子查询相当于第一步查询过滤,外查询就是最后得到结果的查询。经常会用到关键字:ANY、SOME、ALL、IN、EXISTS,注:在子查询语句的后面,必须起别名: //select name,price from (select * from car where powers = 130) as aa;(必须起别名)

1、where型子查询:把内层查询的结果作为外层查询的条件

A、关键字ANY、SOME子查询:ANY/SOME都是表示满足其中一个条件即可。

-- 在student表中选择sID大于表course中gID的数据记录

-- sID只需要大于gID中任何一个就满足条件

SELECT * FROM student WHERE sID > ANY(SELECT gID FROM course);

A、ALL关键字查询

与ANY/SOME相反,是要满足所有的条件才行。

SELECT col1 FROM t1 WHERE clo1> ALL(SELECT col2 FROM t2) as aa;

A、IN关键字查询

IN关键字查询:若外查询想要查询的结果在子查询中,则返回true,继续查询到结果,否则返回false,查询为NULL。

注意:与ANY类似,但是很不相同,IN后面可是子查询,也可以是给定的集合。ANY后面必须为子查询,且前面必须有运算符(<、>、=)

/*先放一放*/

1、from型子查询

即把from后的表名换成查询语句,即把内查询的结果作为一张临时表

1、Exists型子查询:把外层的查询结果,拿到内层中,看是否成立

关键字EXISTS查询:

表示在EXISTS后面的查询结果是否有结果,而不在乎子查询返回什么样的结果。

若子查询的结果至少有一行,则为True,若子查询结果为NULL,则返回False,进行下一次外层查询。

现有两张表

  

现在我要查询第一张表中有子项目的数据

select cat_id,cat_name,parent_id from biao1 where (select * from biao2 where biao1.cat_id = biao2.cat_id);

外层查询一次一次的执行,

第一次取出一个cat_id = 1,带进子查询中的where biao1.cat_id = biao2.cat_id  因为cat_id = 1在biao2中不存在,所以 外层查询进行第二行的查询

第二次取出cat_id = 2,带进子查询中的where biao1.cat_id = biao2.cat_id  因为cat_id =2在biao2中不存在,所以 外层查询进行第三行的查询

第三次取出cat_id = 3,带进子查询中的where biao1.cat_id = biao2.cat_id  因为cat_id =3在biao2中存在,所以 外层查询可以执行select cat_id,cat_name,parent_id

查询结果跟子查询的结果没有关系,只要外层查询的结果在子查询中能够满足,就可以查询出外层查询的结果

原文地址:https://www.cnblogs.com/mr171733/p/9558911.html

时间: 2024-08-29 15:16:33

mysql数据类型和子查询的相关文章

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如:  SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中SELECT * FROM t1 称为Outer Query / Outer Statement (外部查询) SELECT col2 FROM t2 , 被称为Su

MySQL中IN子查询会导致无法使用索引

原文:MySQL中IN子查询会导致无法使用索引 今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int a

MySQL里面的子查询

一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:distinct. group by.order by.limit.join和union等:但是对应的外部查询必须是以下语句之一:select.insert.update.delete.set或 者do. 子查询的位置: select 中.from 后.where 中.group by 和order by

mysql update from 子查询

mssql 子查询更新 update log set uin= b.uinfrom log a,logs bwhere a.accountuin = b.accountuin mysql 不支持 update 子查询更新 找了半天资料 终于搞定了... update `log` a inner join `logs` b on a.`accountuin` = b.`accountuin`set a.`uin` = b.`uin` where a.`accountuin` = b.`accoun

详细讲述MySQL中的子查询操作 (来自脚本之家)

继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE table1 (   customer_id VARCHAR(10) NOT NULL,   city VARCHAR(10) NOT NULL,   PRIMARY KEY(customer_id) )ENGINE=INNODB DEFAULT CH

Mysql中的子查询等操作

1.delete和truncate 区别? 1.1 delete慢 ,Truncate快 1.20delete记录日志,所以慢 truncate不记录日志 1.31 删除所有记录后,主键值delete 不是从1编号,Truncate会从1开始编号 1.43 truncate不能删除有外键的主表 1.5 delete 可以 加where ,删除部分记录 2.两种引擎 InnoDB:支持事务 MyISAM: 3.添加 insert into grade(字段名称) values(对应) 修改 upd

MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)

同样的,使用goods表来练习子查询,表结构如下: 所有数据(cat_id与category.cat_id关联): 类别表: mingoods(连接查询时作测试) 一.子查询 1.where型子查询:把内层查询的结果作为外层查询的比较条件 1.1 查询id最大的一件商品(使用排序+分页实现) :mysql> SELECT goods_id,goods_name,shop_price FROM goods ORDER BY goods_id DESC LIMIT 1; 1.2 查询id最大的一件商

mysql 数据操作 子查询 带比较运算符的子查询

带比较运算符的子查询 #比较运算符:=.!=.>.>=.<.<=.<> #查询大于所有人平均年龄的员工名与年龄 思路 先拿到所有人的平均年龄然后 再用另外一条sql语句 进行比较 拿所有员工的年龄 > 所有人的平均年龄 做比较 mysql> select name,age from employee where age >(select avg(age) from employee) ; +------+------+ | name | age | +

mysql 子句、子查询、连接查询

一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count().sum()等聚合函数一起使用. having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出. order by子句(排序):按照“属性名”指定的字段进行排序.排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序.