MYSQL从简单查询到高级查询(一)

创建表和插入数据
基本查询语句介绍

创建表和插入数据

MYSQL从简单查询到高级查询(一)_第1张图片

#建立部门表
CREATE TABLE `dep` (
  `id` int NOT NULL AUTO_INCREMENT,
  `dep_name` varchar(10) NOT NULL DEFAULT (_utf8mb4''),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
INSERT INTO dep values(1,'部门1'),(2,'部门2'),(3,'部门3');


#建立员工表
CREATE TABLE `emp` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL DEFAULT (_utf8mb4''),
  `age` int NOT NULL,
  `phone` char(11) DEFAULT (_utf8mb4''),
  `dep_id` int DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_emp_dep` (`dep_id`),
  CONSTRAINT `fk_emp_dep` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

为了方便插入数据,这里使用函数过程和自定义函数

#生成2位或3位的名字
CREATE DEFINER=`root`@`%` FUNCTION `rand_name`() RETURNS varchar(255) CHARSET utf8
    DETERMINISTIC
BEGIN
    DECLARE xing varchar(2056) DEFAULT '赵钱孙李周郑王冯陈楮卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闽席季麻强贾路娄危江童颜郭梅盛林刁锺徐丘骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁';

    DECLARE ming varchar(2056) DEFAULT '嘉懿煜城懿轩烨伟苑博伟泽熠彤鸿煊博涛烨霖烨华煜祺智宸正豪昊然明杰诚立轩立辉峻熙弘文熠彤鸿煊烨霖哲瀚鑫鹏致远俊驰雨泽烨磊晟睿天佑文昊修洁黎昕远航旭尧鸿涛伟祺轩越泽浩宇瑾瑜皓轩擎苍擎宇志泽睿渊楷瑞轩弘文哲瀚雨泽鑫磊梦琪忆之桃慕青问兰尔岚元香初夏沛菡傲珊曼文乐菱痴珊恨玉惜文香寒新柔语蓉海安夜蓉涵柏水桃醉蓝春儿语琴从彤傲晴语兰又菱碧彤元霜怜梦紫寒妙彤曼易南莲紫翠雨寒易烟如萱若南寻真晓亦向珊慕灵以蕊寻雁映易雪柳孤岚笑霜海云凝天沛珊寒云冰旋宛儿绿真盼儿晓霜碧凡夏菡曼香若烟半梦雅绿冰蓝灵槐平安书翠翠风香巧代云梦曼幼翠友巧听寒梦柏醉易访旋亦玉凌萱访卉怀亦笑蓝春翠靖柏夜蕾冰夏梦松书雪乐枫念薇靖雁寻春恨山从寒忆香觅波静曼凡旋以亦念露芷蕾千兰新波代真新蕾雁玉冷卉紫山千琴恨天傲芙盼山怀蝶冰兰山柏翠萱乐丹翠柔谷山之瑶冰露尔珍谷雪乐萱涵菡海莲傲蕾青槐冬儿易梦惜雪宛海之柔夏青亦瑶妙菡春竹修杰伟诚建辉晋鹏天磊绍辉泽洋明轩健柏煊昊强伟宸博超君浩子骞明辉鹏涛炎彬鹤轩越彬风华靖琪明诚高格光华国源宇晗昱涵润翰飞翰海昊乾浩博和安弘博鸿朗华奥华灿嘉慕坚秉建明金鑫锦程瑾瑜鹏经赋景同靖琪君昊俊明季同开济凯安康成乐语力勤良哲理群茂彦敏博明达朋义彭泽鹏举濮存溥心璞瑜浦泽奇邃祥荣轩';
    
    DECLARE I_xing int DEFAULT LENGTH(xing) / 3;
    DECLARE I_ming int DEFAULT LENGTH(ming) / 3;
    DECLARE return_str varchar(2056) DEFAULT '';
    
    SET return_str = CONCAT(return_str, substring(xing, floor(1 + RAND() * I_xing), 1));
    SET return_str = CONCAT(return_str, substring(ming, floor(1 + RAND() * I_ming), 1));
    
    IF RAND() > 0.400 THEN
        SET return_str = CONCAT(return_str, substring(ming, floor(1 + RAND() * I_ming), 1));
    END IF;
    
    RETURN return_str;
END
#生成随机年龄
CREATE DEFINER=`root`@`%` FUNCTION `rand_age`() RETURNS int
    DETERMINISTIC
BEGIN
	DECLARE c int;
	set c =RAND()*100;
	RETURN c;
END
#生成随机电话
CREATE DEFINER=`root`@`%` FUNCTION `rand_phone`() RETURNS char(11) CHARSET utf8
    DETERMINISTIC
BEGIN
    DECLARE head VARCHAR(100) DEFAULT '000,156,136,176';
    DECLARE content CHAR(10) DEFAULT '0123456789';
    DECLARE phone CHAR(11) DEFAULT substring(head, 1+(FLOOR(1 + (RAND() * 3))*4), 3);
    DECLARE i int DEFAULT 1;
    DECLARE len int DEFAULT LENGTH(content);
    WHILE i<9 DO
        SET i=i+1;
        SET phone = CONCAT(phone, substring(content, floor(1 + RAND() * len), 1));
    END WHILE;
    
    RETURN phone;
END
#生成随机部门id;
CREATE DEFINER=`root`@`%` FUNCTION `rand_dep`() RETURNS int
    DETERMINISTIC
BEGIN
-- 	DECLARE name VARCHAR(5) DEFAULT('部门');
	DECLARE num INT DEFAULT(1);
	SET num=FLOOR(1+(RAND() * 3));
-- 	SET num=SELECT case CONCAT(name,num) WHEN '部门1' THEN 1 WHEN '部门2' THEN 2 ELSE 3 END;
	return num;
END
#创建员工
CREATE DEFINER=`root`@`%` PROCEDURE `add_emp`(IN `num` int)
BEGIN
	DECLARE i int DEFAULT 1;
    WHILE (i <= `num` ) DO  
      INSERT into emp  VALUES (i,rand_name(),rand_age(),rand_phone(),rand_dep());  
            set i=i+1;
    END WHILE;
END

完成上面创建表,创建函数过程和自定义函数后,调用函数过程add_emp生成随机员工。

CALL add_emp(30);

MYSQL从简单查询到高级查询(一)_第2张图片

基本查询语句介绍

SELECT {*|<字段列表>}
[WHERE<表达式>][GROUP BY<group by definition>]
[HAVING <expression>[{<operation><expression>}...]]
[ORDER BY <order by definition>]
[LIMIT [<offset>,]<row count>]}
SELECT [字段1,字段2...字段n] FROM [表或视图] WHERE [查询条件];

其中,各条子句的含义如下:

  • {* | <字段列表>}包含星号通配符和字段列表,表示查询的字段。其中,字段列表至少包含一个字段名称,如果要查询多个字段,多个字段之间用逗号隔开,最后一个字段后不加逗号。
  • FROM <表1>,<表2>…,表1和表2表示查询数据的来源,可以是单个或者多个。
  • WHERE子句是可选项,如果选择该项,将限定查询行必须满足的查询条件。
  • GROUP BY <字段>,该子句告诉MySQL如何显示查询出来的数据,并按照指定的字段分组。
  • [ORDER BY <字段>],该子句告诉MySQL按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)、降序(DESC)。
  • [LIMIT [,] ],该子句告诉MySQL每次显示查询出来的数据条数。

你可能感兴趣的:(从零开始MySQL,数据库,mysql)