sql语句代编写、sql 游标 、事务代写

sql语句代编写、sql 游标 、事务代写
1. Aims
This project aims to give you practice in
? reading and understanding a moderately large relational schema (MyMyUNSW)
? implementing SQL queries and views to satisfy requests for information
? implementing SQL functions to aid in satisfying requests for information
The goal is to build some useful data access operations on the MyMyUNSW database. A theme of
this project is "dirty data". As I was building the database, using a collection of reports from UNSW‘s
information systems and the database for the academic proposal system (MAPPS), I discovered that
there were some inconsistencies in parts of the data (e.g. duplicate entries in the table for UNSW
buildings, or students who were mentioned in the student data, but had no enrolment records, and,
worse, enrolment records with marks and grades for students who did not exist in the student data).
I removed most of these problems as I discovered them, but no doubt missed some. Some of the
exercises below aim to uncover such anomalies; please explore the database and let me know if you
find other anomalies.
2. How to do this project:
? read this specification carefully and completely
? familiarize yourself with the database schema (description, SQL schema, summary)
? make a private directory for this project, and put a copy of the proj1.sql template there
? you must use the create statements in proj1.sql when defining your solutions
? look at the expected outputs in the expected_qX tables loaded as part of the check.sql file
? solve each of the problems below, and put your completed solutions into proj1.sql
? check that your solution is correct by verifying against the example outputs and by using
the check_qX() functions
? test that your proj1.sql file will load without error into a database containing just the original
MyMyUNSW data
? double-check that your proj1.sql file loads in a single pass into a database containing just the
original MyMyUNSW data
? submit the project via give.
3. Introduction
All Universities require a significant information infrastructure in order to manage their affairs. This
typically involves a large commercial DBMS installation. UNSW‘s student information system sits
behind the MyUNSW web site. MyUNSW provides an interface to a PeopleSoft enterprise
management system with an underlying Oracle database. This back-end system (Peoplesoft/Oracle)
is often called NSS.
UNSW has spent a considerable amount of money ($80M+) on the MyUNSW/NSS system, and it
handles much of the educational administration plausibly well. Most people gripe about the quality
of the MyUNSW interface, but the system does allow you to carry out most basic enrolment tasks
online.
Despite its successes, however, MyUNSW/NSS still has a number of deficiencies, including:
? no waiting lists for course or class enrolment
? no representation for degree program structures
? poor integration with the UNSW Online Handbook
The first point is inconvenient, since it means that enrolment into a full course or class becomes a
sequence of trial-and-error attempts, hoping that somebody has dropped out just before you
attempt to enrol and that no-one else has grabbed the available spot.
The second point prevents MyUNSW/NSS from being used for three important operations that
would be extremely helpful to students in managing their enrolment:
? finding out how far they have progressed through their degree program, and what remains
to be completed
? checking what are their enrolment options for next semester (e.g. get a list
of suggested courses)
? determining when they have completed all of the requirements of their degree program and
are eligible to graduate
NSS contains data about student, courses, classes, pre-requisites, quotas, etc. but does not contain
any representation of UNSW‘s degree program structures. Without such information in the NSS
database, it is not possible to do any of the above three. So, in 2007 the COMP9311 class devised a
data model that could represent program requirements and rules for UNSW degrees. This was built
on top of an existing schema that represented all of the core NSS data (students, staff, courses,
classes, etc.). The enhanced data model was named the MyMyUNSW schema.
The MyMyUNSW database includes information that encompasses the functionality of NSS, the
UNSW Online Handbook, and the CATS (room allocation) database. The MyMyUNSW data model,
schema and database are described in a separate document.
4. Setting Up
To install the MyMyUNSW database under your Grieg server, simply run the following two
commands:
$ createdb proj1
$ psql proj1 -f /home/cs9311/web/18s1/proj/proj1/mymyunsw.dump
If you‘ve already set up PLpgSQL in your template1 database, you will get one error message as the
database starts to load:
psql:mymyunsw.dump:NN: ERROR: language "plpgsql" already exists
You can ignore this error message, but any other occurrence of ERROR during the load needs to be
investigated.
If everything proceeds correctly, the load output should look something like:
SET
SET
SET
SET
SET
psql:mymyunsw.dump:NN: ERROR: language "plpgsql" already exists
... if PLpgSQL is not already defined,
... the above ERROR will be replaced by CREATE LANGUAGE
SET
SET
SET
CREATE TABLE
CREATE TABLE
... a whole bunch of these
CREATE TABLE
ALTER TABLE
ALTER TABLE
... a whole bunch of these
ALTER TABLE
Apart from possible messages relating to plpgsql, you should get no error messages. The database
loading should take less than 60 seconds on Grieg, assuming that Grieg is not under heavy load. (If
you leave your project until the last minute, loading the database on Grieg will be considerably
slower, thus delaying your work even more. The solution: at least load the database Right Now, even
if you don‘t start using it for a while.) (Note that the mymyunsw.dump file is 50MB in size; copying it
under your home directory or your /srvr directory is not a good idea).
If you have other large databases under your PostgreSQL server on Grieg or you have large files
under your /srvr/YOU/ directory, it is possible that you will exhaust your Grieg disk quota. In
particular, you will not be able to store two copies of the MyMyUNSW database under your Grieg
server. The solution: remove any existing databases before loading your MyMyUNSW database.
If you are running PostgreSQL at home, the file proj1.tar.gz contains copies of the
files: mymyunsw.dump, proj1.sql to get you started. You can grab the check.sql separately, once it
becomes available. If you copy proj1.tar.gz to your home computer, extract it, and perform
commands analogous to the above, you should have a copy of the MyMyUNSW database that you
can use at home to do this project.
A useful thing to do initially is to get a feeling for what data is actually there. This may help you
understand the schema better, and will make the descriptions of the exercises easier to understand.
Look at the schema. Ask some queries. Do it now.
Examples ...
$ psql proj1
... PostgreSQL welcome stuff ...
proj1=# \d
... look at the schema ...
proj1=# select * from Students;
... look at the Students table ...
proj1=# select p.unswid,p.name from People p join Students s on (p.id=s.id);
... look at the names and UNSW ids of all students ...
proj1=# select p.unswid,p.name,s.phone from People p join Staff s on (p.id=s.id);
... look at the names, staff ids, and phone #s of all staff ...
proj1=# select count(*) from Course_Enrolments;
... how many course enrolment records ...
proj1=# select * from dbpop();
... how many records in all tables ...
proj1=# select * from transcript(3197893);
... transcript for student with ID 3197893 ...
proj1=# ... etc. etc. etc.
proj1=# \q
You will find that some tables (e.g. Books, Requirements, etc.) are currently unpopulated; their
contents are not needed for this project. You will also find that there are a number of views and
functions defined in the database (e.g. dbpop() and transcript() from above), which may or may not
be useful in this project.
Summary on Getting Started
To set up your database for this project, run the following commands in the order supplied:
$ createdb proj1
$ psql proj1 -f /home/cs9311/web/18s1/proj/proj1/mymyunsw.dump
$ psql proj1
... run some checks to make sure the database is ok
$ mkdir Project1Directory
... make a working directory for Project 1
$ cp /home/cs9311/web/18s1/proj/proj1/proj1.sql Project1Directory
The only error messages produced by these commands should be those noted above. If you omit any
of the steps, then things will not work as planned.
Notes
Read these before you start on the exercises:
? the marks reflect the relative difficulty/length of each question
? use the supplied proj1.sql template file for your work
? you may define as many additional functions and views as you need, provided that (a) the
definitions in proj1.sql are preserved, (b) you follow the requirements in each question on
what you are allowed to define
? make sure that your queries would work on any instance of the MyMyUNSW schema;
don‘t customize them to work just on this database; we may test them on a different
database instance
? do not assume that any query will return just a single result; even if it phrased as "most" or
"biggest", there may be two or more equally "big" instances in the database
? you are not allowed to use limit in answering any of the queries in this project
? when queries ask for people‘s names, use the Person.name field; it‘s there precisely to
produce displayable names
? when queries ask for student ID, use the People.unswid field; the People.id field is an
internal numeric key and of no interest to anyone outside the database
? unless specifically mentioned in the exercise, the order of tuples in the result does not
matter; it can always be adjusted using order by. In fact, our check.sql will order your
results automatically for comparison.
? the precise formatting of fields within a result tuple does matter; e.g. if you convert a
number to a string using to_char it may no longer match a numeric field containing the same
value, even though the two fields may look similar
? develop queries in stages; make sure that any sub-queries or sub-joins that you‘re using
actually work correctly before using them in the query for the final view/function
? You can define either SQL views OR SQL functions to answer the following questions.
? If you meet with error saying something like “cannot change name of view column”, you can
drop the view you just created by using command “drop view VIEWNAME cascade;” then
create your new view again.
Each question is presented with a brief description of what‘s required. If you want the full details of
the expected output, take a look at the expected_qX tables supplied in the checking script.
5. Tasks
To facilitate the semi-auto marking, please pack all your SQL solutions into view or function as
defined in each problem (see details from the solution template we provided).
Q1 (2 marks)
Define an SQL view Q1(unswid,name) that gives the student id and name of any international
student who has got at least 85 marks in more than 20 courses. The name should be taken from the
People.name field for the student, and the student id should be taken from People.unswid
field.
Q2 (2 marks)
Define a SQL view Q2(unswid,name) that displays unswid and name of all the rooms in
Computer Science Building whose types are Meeting Room and capacity are no less
than 20. The view should return the following details about each room:
? unswid should be taken from Rooms.unswid field.
? name should be taken from Rooms.longname field.
? Since there are dirty data in the database, ignore rooms whose capacity is null.
Q3 (2 marks)
Define a SQL view Q3(unswid,name) that displays unswid and name of all the staff who
teached student Stefan Bilek. The view should return the following details about each staff:
? unswid should be taken from People.unswid field.
? name should be taken from People.name field.
Q4 (2 marks)
Define a SQL view Q4(unswid,name) that gives all the students who enrolled in COMP3331 but
not in COMP3231 (COMP3331 and COMP3231 refer to the Subjects.code). The view should
return the following details about each student:
? unswid should be taken from People.unswid field.
? name should be taken from People.name field.
Q5 (2 marks)
Define SQL views Q5a(num), Q5b(num), which give the number of, respectively
? local students enrolled in 11S1 in stream(s) named Chemistry
? international students enrolled in 11S1 in degrees offered by School of Computer
Science and Engineering
Q6 (2 marks)
Write a SQL function that takes a UNSW course code as parameter and returns course name and units
of credit (UOC) in the format of code (use the code field from the Subjects table), name (use
the name field from the Subjects table) and UOC (use the uoc field from the Subjects
table) concatenated (e.g., ‘COMP9311 Database Systems 6’). The function should be defined
as follows:
create or replace function Q6(text) returns text
Note that there is a space between code, name and UOC.
Q7 (3 marks)
Define a SQL view Q7(code,name) that displays all the programs which have more than 50
percent of international students. In a program, the percent of international students is defined as the
number of international students / the number of all the students. The view should return the following
details about each program:
? code should be taken from Programs.code field.
? name should be taken from Programs.name field.
Note that you should select all the programs even if they have same code and name.
Q8 (3 marks)
Define a SQL view Q8(code,name,semester) that displays the course that has the highest
average mark. To avoid extreme situations, only consider courses which have at least 15 not null
mark records (Course_enrolments.mark). The view should return the following details about
each course:
? code should be taken from Subjects.code field.
? name should be taken from Subjects.name field.
? semester should be taken from Semesters.name field.
Q9 (3 marks)
Define an SQL view Q9(name,school,email,starting,num_subjects) which gives the
details about all of the current Head of School at UNSW. The view should return the following
details about each Head:
? their name (use the name field from the People table)
? the school (use the longname field from the OrgUnits table)
? their email address (use the email field from Staff table)
? the date that they were appointed (use the starting date from the Affiliations table)
? the number of different subjects they have participated as a staff
Since there is some dirty-looking data in the Affiliations table, you will need to ensure that you
return only legitimate Head of School. Apply the following filters together:
? only choose people whose role is exactly ‘Head of School’
? only choose people who have not finished in the role
? only choose people for whom this is their primary role
? only choose organisational units whose type is actually ‘School’
Note that two subjects are different if they have different subject codes (Subject.code field)
Q10 (4 marks)
The head of school would like to know the performance of students in a set of CSE subjects. Subjects
in this set have their subject codes starting with “COMP93” and are offered in every major semester
(i.e., S1 and S2) in a given period (from 2003 (inclusive) to 2012 (inclusive)). To evaluate the
performance of students, the head of school requested to know the HD rate in every major semester in
the given period. The HD rate is defined as the number of students who have got HD
(Course_enrolments.mark >= 85) / number of students who have actually received a mark (i.e.
Course_enrolments.mark >= 0). Define an SQL view
Q10(code,name,year,s1_HD_rate,s2_HD_rate) that gives a list of subjects. Each tuple
in the view should contain the following:
? the subject code (Subject.code field)
? the subject name (Subject.name field)
? the year (Semesters.year field in the format of the last 2 digits (i.e., 12 for 2012))
? semester 1 HD rate as numeric(4,2)
? semester 2 HD rate as numeric(4,2)
Note:
(1). We only consider the students who receive a mark for the course taken. You may use
Course_enrolments.mark >= 0 to retrieve a list of valid students.
(2). Use numeric (4,2) to restrict the precision of the ratios, and be careful about typecasting
between integers and reals.
(3). You may not be allowed to use Semesters.id values directly anywhere in your query (e.g., you
may not refer to 07S1 as 146). Try to use symbolic name (e.g., ‘00S1’) to refer to any semester in
your SQL.
6. Submission
You can submit this project by doing the following:
? Ensure that you are in the directory containing the file to be submitted.
? Type “give cs9311 proj1 proj1.sql”
? If you submit your project more than once, the last submission will replace the previous one
? To prove successful submission, please take a screenshot as assignment submission
manual shows and keep it by yourself.
? If you have any problems in submissions, please email to [email protected] You can
also ask questions about this project in our project online Q&A group, we will answer your
questions as soon as possible.
The proj1.sql file should contain answers to all of the exercises for this project. It should be
completely self-contained and able to load in a single pass, so that it can be auto-tested as follows:
? a fresh copy of the MyMyUNSW database will be created (using the schema
from mymyunsw.dump)
? the data in this database may be different from the database that you‘re using for testing
? a new check.sql file will be loaded (with expected results appropriate for the database)
? the contents of your proj1.sql file will be loaded
? each checking function will be executed and the results recorded
Before you submit your solution, you should check that it will load correctly for testing by using
something like the following operations:
$ dropdb proj1 ... remove any existing DB
$ createdb proj1 ... create an empty database
$ psql proj1 -f /home/cs9311/web/18s1/proj/proj1/mymyunsw.dump ... load the MyMyUNSW
schema and data
$ psql proj1 -f /home/cs9311/web/18s1/proj/proj1/check.sql ... load the checking code
$ psql proj1 -f proj1.sql ... load your solution
$ psql proj1
proj1=# select check_q1(); … check your solution to question1

proj1=# select check_q5a(); … check your solution to question5a

proj1=# select check_q10(); … check your solution to question10
proj1=# select check_all(); … check all your solutions to q1-q10
Note: if your database contains any views or functions that are not available in a file somewhere,
you should put them into a file before you drop the database.
If your code does not load without errors, fix it and repeat the above until it does.
You must ensure that your proj1.sql file will load correctly (i.e. it has no syntax errors and it contains
all of your view definitions in the correct order). If I need to manually fix problems with
your proj1.sql file in order to test it (e.g. change the order of some definitions), you will be fined via
half of the mark penalty for each problem.
7. Late Submission Penalty
10% reduction for the 1st day, then 30% reduction.
http://www.6daixie.com/contents/15/1324.htm

本团队核心人员组成主要包括硅谷工程师、BAT一线工程师,国内Top5硕士、博士生,精通德英语!我们主要业务范围是代做编程大作业、课程设计等等。

我们的方向领域:window编程 数值算法 AI人工智能 金融统计 计量分析 大数据 网络编程 WEB编程 通讯编程 游戏编程多媒体linux 外挂编程 程序API图像处理 嵌入式/单片机 数据库编程 控制台 进程与线程 网络安全  汇编语言 硬件编程 软件设计 工程标准规等。其中代写代做编程语言或工具包括但不限于以下范围:

C/C++/C#代写

Java代写

IT代写

Python代写

辅导编程作业

Matlab代写

Haskell代写

Processing代写

Linux环境搭建

Rust代写

Data Structure Assginment 数据结构代写

MIPS代写

Machine Learning 作业 代写

Oracle/SQL/PostgreSQL/Pig 数据库代写/代做/辅导

Web开发、网站开发、网站作业

ASP.NET网站开发

Finance Insurace Statistics统计、回归、迭代

Prolog代写

Computer Computational method代做

因为专业,所以值得信赖。如有需要,请加QQ:99515681 或邮箱:[email protected]

微信:codinghelp

原文地址:https://www.cnblogs.com/helpcode/p/8946604.html

时间: 2024-10-13 06:21:44

sql语句代编写、sql 游标 、事务代写的相关文章

使用sql语句创建修改SQL Server标识列(即自动增长列)

一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3.列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列.由于以上特点,使得标识列在数据库的设计中得到广泛的使用.二.标识列的组成创建一个标识列,通常要指定三个内容:1.类型(type)在SQL Server 2000中,标识列类型必须是数值类型,如下:decima

pl/sql developer 快捷操作: 显示不可见字符 显示历史sql语句 拷贝整个sql窗口的语句至新的sql窗口

显示不可见字符:可以把空格.回车显示出来: 显示历史sql语句:ctrl+e,不仅仅包含这个数据库的sql语句,还有其他数据库的:必须在sql窗口才可以激活这个功能: 拷贝整个sql语句至新的sql窗口:可以进行快捷的备份.修改:

C#使用带like的sql语句时防sql注入的方法

本文实例叙述了在拼接sql语句的时候,如果遇到Like的情况该怎么办. 一般采用带like的SQL语句进行简单的拼接字符串时,需要开率遇到sql注入的情况.这确实是个需要注意的问题. 这里结合一些查阅的资料做了初步的整理. 如这样一个sql语句: select * from game where gamename like '%张三%' 用c#表示的话: string keywords = "张三"; StringBuilder strSql=new StringBuilder();

使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句

重建包名 org.hibernate.type.descriptor.sql 重建类BasicBinder 代码如下 package org.hibernate.type.descriptor.sql; import java.sql.PreparedStatement; import java.sql.SQLException; import org.hibernate.internal.CoreLogging; import org.hibernate.type.descriptor.Jdb

常用SQL语句的整理--SQL server 2008(查询三--子查询)和guid

--分页数据----ROW_NUMBER()叫做开窗函数,可以进行分页操作 select ROW_NUMBER() over(order by id)as num,*from gb_data----给每一列加上一个连续的num值,方便取第几个到第几个数据的时候使用的 select ROW_NUMBER() over(order by id)as num,*from gb_data where num>5and num<10--这行代码是错误的,因为系统识别不出来num是多少,为什么呢? --是

查看sql语句执行时间/测试sql语句性能

写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下: SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时间(以毫秒为单位). SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数.逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁

使用explain来分析SQL语句实现优化SQL语句

用法:explain sql 作用:用于分析sql语句 mysql> explain select * from quser_1 where loginemail = "[email protected]"; +----+-------------+---------+------+-----------------+-----------------+---------+-------+------+-----------------------+ | id | select_

解决 微信包含emoji表情的昵称,直接用sql语句可以写入而在yii2框架写却写不成功的 问题

背景: 首先是emoji表情写入不成功,在网上查了许多资料,包括配置mysql,重启mysql等等,这样之后发现还是写入失败. 将sql语句复制出来,直接粘贴到mysql客户端执行,发现没问题.而通过代码写入却有问题 解决方案: 在config/db.php中将charset = 'utf8'改为charset='utf8mb4' 原生php也类似,可以检查代码中的charset 原文地址:https://www.cnblogs.com/roggeyue/p/10811993.html

常用SQL语句的整理--SQL server 2008(查询二--)

SQL中的内置函数: --聚合函数COUNT--查询表中数据的条数 select COUNT(*) from person select COUNT(*) from person where age in(18,19,20)--可以跟想要的上一节讲的所有函数 --MIN,MAX,Avg,SUM select MIN(age) from person select max(age) from person select avg(age) from person select sum(age) fr

mongodb 语句和SQL语句对应(SQL to Aggregation Mapping Chart)

SQL to Aggregation Mapping Chart https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/ On this page Examples Additional Resources The aggregation pipeline allows MongoDB to provide native aggregation capabilities that corresponds to m