sql修炼笔记——入门篇2

稍探sql用法

实验目标所要建立的表格

 题外话 mysql中的注释语句使用的是--  比如 --创建资料库 即注释

1.创建公司资料库 本段主要涉及数据库内多个表格的相互联系与应用

三个列表的列定义 primary key, foreign key, attribute

primary key 的设定直接在column的定义后加上primary key 即可 或者用 primary key (“column”)

foreign key 的设定   foreign key("manager_id") references  "employee"(列表名)("emp_id") on delete set null

另一种写法 alter table "employee" add foreign key ("branch_id") references "branch"("branch_id") on delete set null;

一个column可以同时是primary key 和foreign key

只需  primary key(“column”) 然后再  foreign key("manager_id") references  "employee"("emp_id") on delete cascade

由于foreignkey的定义是来源于其他的列表数据,所以在其他列表数据尚未定义时要先设置为null 然后才能比较方便的进行定义

2.公司资料库的操作

取得所有员工资料 : select * from employee;

取得所有客户资料:select * from client;

按照薪水高低取得员工资料: select * from employee order by salary asc;

取得薪水前三高的员工:select * from employee order by salary desc limit 3;

取得所有员工的名字: select (distinct 取消重复数据) 'name' from employee ;   

3.aggregate functions 聚合函数

其实就是count()函数和avg()函数这些。例子如下

取得员工人数:SELECT COUNT(*) FROM `employee`;   -- 列计数 一列有多少行  使用count(·column·)时取得的是该列中非null的行数

取得所有1970-01-01之后的女性员工人数:select count(*) from employee where birth-data > '1970-01-01' and sex = "F";

取得所有员工的平均薪水:select avg(`salary`) from employee;

取得所有员工的总薪水:select sum(`salary`) from employee;

薪水最高的员工:select max(`salary`) from employee;

4.万用字元 wildcards

%代表多个字元 _代表一个字元

取得电话号码尾号是335的客户:select * from `cilent` like "%335";   --类似的 355%就是以355开头的字符串  %354%就是只要包含354即可

取得姓艾的客户:select * from client like "艾%";

取得生日在12月的员工:select * from client where `birth_data` like "_____12%"; 五个_代表1990-

5.连集union

员工名字连集客户名字: select `name` from employee union select `name` from client;  --这里的话就是将两个表格搜寻的结果依次链接,合并到结果表格中

注意合并的两个或者是多个搜索结果的列数必须是相同的 都是一列或者都是多列 同时同一列的数据类型也要是相同的 都是int 或者都是varchar

员工id 员工名字 union 客户id 客户名字:select emp_id, name from employee union select client_id, name from client;   返回的列表的列名使用的是第一个union的列名 也就是  emp_id 和name

可以对列名进行修改 使用as函数     emp_id as total_id

员工薪水union销售金额:select salary as total_money from employee  union select total_sales from work_with

6.连接 join

取得所有部门经理的名字:select * from employee join branch on emp_id = manager_id ; 筛选出符合条件的部分资料进行行链接 是横向的链接 此时使用的是* 所以是所有数据进行的连接

可以使用select选出所需要的数据  对列名相同的数据进行筛选判断时可以使用employee.emp_id = branch.manage_id;  select中的选择同理 employee.emp_id,branch.branch_name

join使用时可以用 left join 此时无论条件是否成立 左边表格的资料都会回传 右边表格则会传回null

from employee left join branch 在join的左边就是左边表格 右边就是右边表格 

同理还有right join

7.子查询 subquery

子查询就是一层查询嵌套另一层 用法可以是查询使用的判断条件是使用查询来得到的,如

找出研发部门的经理名字:select name from employee where emp_id = ( select manager_id from branch where branch_name = "研发" );

找出对单一客户的销售金额超过50000的员工id:select name from employee where emp_id in ( select emp_id from employee where 'total_sales' > 50000 );

 8.on delete

此前的用法 foreign key ('manager_id') references 'employee'('emp_id') on delete  set null  意思就是当指向的empid删除时设置为null而非空

foreign key ('emp_id') references 'employee'('emp_id') on delete  cascade 对应不到时同时一起删除 此处使用cascade的原因是该表格中的empid同时是主键和foreignkey 主键不可为空

9.python连接mysql

入门篇的最后一部 到此已经对于mysql有了初步的认知与掌握 接下来便没有了固定的路程 天高任鸟飞,海阔凭鱼跃 共勉吧

 

import mysql.connector

connection = mysql.connector.connect(host = "local", port = "3306", user = "root", password = "373750073")

cursor = connection.cursor

执行语句:cursor.excute("show databases;")

records = cursor.fetchall()获得所有回传资料

cursor.close()

connection.commit()

connection.close()

BYE!

posted on 2024-07-22 22:10  prayerto  阅读(1)  评论(0编辑  收藏  举报