-
DEFAULT 的用法
查看全部 -
唯一约束 {
保证该条记录的唯一性
}
查看全部 -
如果数据表中文字符很多,而且数据很多时那么查询运行的时间将会很多,所以有时必要将一些文字编程数字,方便查询。那么就需要建立外键,将文字转化成数字(如类型转化成品类1,2,3、、、)
一、因此先创建一个数据表: GREAT TABLE good_cates FROM tdb_goods IF NOT EXISTS good_cate;
二、然后查看总表里要更改的品类有多少个类型:SELECT good_cate FROM tdb_good GROUP BY good_cate;
三、然后将查询到的品类写入到新建表中(查看表结构DESC tdb_goods_cates;):
INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
四、最后根据分类表更新总表(多表更新):
UPDATE table references SET col_namel={expr1|DEFAULT) [,col_name2={expr2 | DEFAULT])]...[WHERE where_condition]
两张表的链接可以赋予别名也可以不赋予别名,即使用表的名称进行连接。或者还可以使用表的类型进行连接。
如:UPDATE tdb_goods INNER JOIN(常用) tdb_goods_cateS ON(条件) goods_cate=cate_name SET(更新的值) goods_cate=cate.id.
表的更新步骤为:
一、创建表
二、INSERT SELECT 将记录写入数据表
三、多表的更新
多表更新:
(1) UPDATE table_references SET col_name1={expr1| DEFAULT}[ , col_name2={expr2 | DEFAULT] ... [WHERE where_condition]
(2) CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...] select_statement
方法(2)要优于方法(1),方法(2)相当于将查询和插入结合在一起
由于
如:语句一:SELECT brand_name FROM tdb_goods group by brand_name;
语句二:
CREAT TABLE tdb_goods_brands
—>(
—>brand_id SMALLINT UNSIGEDV PREMAY KEY AUTO_INCREMENT,
—>brand_name VARCHAR(40) NOT NULL
—>)
—>SELECT brand_name FROM tdb_goods GROUP BY brand_name;
用表的别名进行表的更新更方便:
如:UPDATE tdb_goods AS g INNERJOIN tdb_goods_brands AS b ON g.brand_name=b.brand_name
—>SET g.brand_name=b.brand_id;
五、在更新表之后,由于表的结构可能还是字符型,因此先查看一下表的结构:
SHOW COLUMNS FROM tdb_goods;(或者DESC tdb_goods)
六、然后更改结构,即将字符改成数字:
ALTER TABLEtdb_goods
—>CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,
—>CAHNGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;
此时才是真正的对数据表减肥
查看全部 -
查看全部
-
INSERT VALUE 和 INSERT SET 区别在于后者有子查询,而前者没有。
INSERT [INTO] tbL_name [(col_name,...) SELECT...
如:INSERT tdb_name(cate_name) SELECT goods_cates FROM tdb_goods GROUP BY goods_cate(分类);
查看全部 -
prompt
查看全部 -
set names gbk;使乱码文字正常显示查看全部
-
2)另外还有子查询为:operand comparison_operator [NOT] IN (subquery)
=ANY运算符与IN等效。
!=ALL 或 <>ALL运符与NOT IN等效。
如:SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>ANY(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本'); ——取到的是子查询里面的最小值
SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price=ANY(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本'); ——结果返回一定是错误的,与上节笔记所说一样
SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price != ANY(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本'); ——结果为除了子查询结果的其他所有结果
3)如果子查询返回任何行, EXISTS将返回TRUE ;否则为FALSE(很少用到的)
查看全部 -
使用比较运算符的子查询=、>、<、>=、<=、<>、!=、<=>
语法结构 operand comparison_operator subquery
如:SELECT AVG(goods_price) FROM tb1_goods; ——查找到的是平均价格。
SELECT ROUND(AVG(goos_price),2) FROM tb1_goods; ——这个是对查找到的平均数保留两位小数。
假如平均值为:5636.36 , 那么接下来查找大于平均值的列:
SELECT goods_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>=5636.36;
因为5636.36是说那个一条的结果,那么将两个语句合并后为:(子查询)
SELECT goods_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>=(SELECT ROUND(AVG(goods_price),2) FROM tb1_goods);
如果要查找其他结果,如:SELECT goods_price FROM tb1_goods WHERE goods_cate='超级本'; ——查找超级本的价格
SELECT * FROM tb1_goods WHERE goods_cate='超级本'; —— 查找超极本的所有列
SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本'); ——返回值为错误,原因是>后面的查找结果不是唯一的,而且并没有指定>的是具体那个数或者范围,那么:
此时就需要用到:operand comparison_operator ANY (subquery)
operand comparison_operator SOME (subquery)
operand comparison_operator ALL (subquery)其中,ANY, SOME, ALL的使用原则就是:
ANY SOME ALL
> 和 >= min min max
< 和 <= max max min
= 任意值 任意值
<> 和 != 任意值
查看全部 -
子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。
例如:
SELECT * FROM t1 WHERE col1= (SELECT col2 FROM t2);
其中SELECT * FROM t1,称为Outer Query/Outer Statement
SELECT col2 FROM t2,称为SubQuery
subquery:指的是我们所有知道SQL命令的统称
(1)子查询指嵌套在查询内部,且必须始终出现在圆括号内。
(2)子查询可以包含多个关键字或条件,如DISTINCT, GROUP BY, ORDER BY,LIMIT,函数等。
(3)子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO
(4)子查询可以返回标量、一行、一列或子查询。
查看全部 -
SHOW COLUMNS FROM tb1_name;
如果呈现出结果为乱码,则说明数据例如有问题,我们采用:
SET NAMES gbk; ( 这样呈现的数据就是正常的,而且不影响客户端的数据,只是在MySQL中的呈现中不是乱码的文字。)
查看全部 -
float
查看全部 -
char varchar
查看全部 -
数据的记录操作:
增:INSERT
更:UPDATE
删:DELETE
查:SELECT
1.插入记录:
INSERT [INTO] tb1_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFUALT},...),(...),...
注意:如果col_name被省略,意味着所有的列都要依次被赋值,不可以省略;
对于默认编号(AUTO_INCREMENT)的字段,使用NULL/DEFUALT进行插入;
而且插入的记录是识别算术,函数和字符表达式的
(2)INSERT [INTO] tb1_name SET col1_name={expr | DEFAULT}, ...
如:INSERT users2 SET username='***',password='****';
说明与第一种不同之处在于:此方法可以使用子查询(SubQuery)
(3)INSERT [INTO] tb1_name [(col_name, ...)] SELECT ...
此方法可以讲查询结果插入到指定数据表中
2.单表更新(当插入时,记录有错误或更改字段值):
UPDATE [LOW_PRIORITY] [IGNORE] table-reference SET col_name={expr1| DEFUALT}, [col_name2={expr | DEFUALT}]...[WHERE where
_condition]如果省略where条件的话就是所有条件都将更新:如UPDATE users SET age=age+id,sex=0; 然后select * FROM users查看结果。
或者:UPDATE users SET age=age+10,WHERE id % 2 = 0;
可看见:1.更新多条记录; 2. 也可用来修改命令。
3.删除记录:
单表删除:
DELETE FROM tb1_name [WHERE where_condition]
如:删除第六条记录:DELETE FROM users WHERE id = 6; 而后再添加记录:INSERT users VALUE(NULL,'111','222',33,NULL); 那么该条记录不会填充到第六条,而是以顺序填到最后一个
条件表达式
对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
在WHERE表达式中,可以使用MySQL支持的函数或运算符。4.查找记录
SELECT select expr [ select_expr ...]
[
FROM table references
[WHERE where_condition]
[GROUP BY {col_name | position} [ASC | DESC], ...]
[HAVING where condition]
[ORDER BY {col_name | expr | position} [ASC | DESC],...]
[LIMIT {[offset,] row-count | row_count OFFSET offset}]
]SELECT后面可以省略:如SELECT VERSION();/SELECT NOW();/SELECT 3+5;/SELECT id,username FROM users;/SELECT username,id FROM users;
所以查询顺序影响结果的输出顺序!!!
*表示所有的列
可以在查询的列前面加上表名+. 如:SELECT users.id,user2.password FROM users;
当列名称复杂时可以用别名:如 SELECT users.id AS usersid, users.username AS uname FROM users;(注意一下AS)
所以查询的别名也影响输出结果的列名!!!
查询结果分组:[GROUP BY {col_name | position} [ASC | DESC], ... ]
ASC 升序;DESC 降序;
如:SELECT sex FROM users GROUP BY sex/"位置"; 查看性别的分组结果。(一般指定名称就行)
在GROUP BY 进行分组的时候,还可以进行设置分组条件:[HAVING where_condition]
如:SELECT sex FROM users GROUP BY 1 HAVING age > 35; 这个语句错误,原因是sex里面没有age,所以更正为:SELECT sex,age FROM users GROUP BY 1 HAVING age > 35;或者采用聚合函数(max,min,sum等) 如 SELECT sex FROM users GROUP BY 1 HAVING count(id)>=2;
还可以对查询分组的结果进行排序:
[ORDER BY {col_name | expr | position} [ASC | DESC], ...]
如:SELECT * FROM users ORDER BY id age DESC; 默认是升序。
除了返回记录的排序还可以对记录进行限制查询结果的数量:
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
如:SELECT * FROM users LIMIT 2; 返回两条记录;
SELECT * FROM users LIMIT 2,2;返回的是偏移值(索引号)为2的记录开始的两条记录(不管升序还是降序,第一条记录的索引号都是0);
插入记录:
INSERT [INTO] tbl_name SET col_name={expr | DEFAULT),...
说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery)(他可以将查找的数据插入到指定数据表)如:INSERT test(username) SELECT username FROM users WHERE age >= 30; 查找username表里的age>=30的username,插入到test表中的username列————综合一点的
查看全部 -
int值范围
查看全部
举报