Microsoft SQL Server
--
Questions
--
Followers
Top Experts
Check the attachment, I pretty much got my paper written. A little help goes a long way and if you can't I understand that as well. Thanks again everyone!
EAGLE!
IT350-Final-Project.pdf
Zero AI Policy
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
(1) you probably wanted MS SQL -- not MySQL
(2) I believe HW help is against the TOS for EE.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
Your first task is to figure out which database server you are using. If you're not sure of that, then it is very likely we cannot provide the kind of help you need. You may have also selected the wrong classes.
We cannot do your homework/tests for you:
https://www.experts-exchange.com/help.jsp#hs=23&hi=21
But we can point you to resources useful in finding the answer. Assuming you are using MSSQL (not MySQL, which is not a Microsoft product), your first answer can be found here:
http://msdn.microsoft.com/en-us/library/aa258255%28SQL.80%29.aspx
You should be able to explore the links provided on that page to discover the rest of the knowledge you will need.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
So, either way MySQL and MS SQL are not so hugely different, but there can be subtleties in their syntax. So anything the experts post, you need to just double and tripple check.
First up, seeing there are a lot of different parts to your work, where are the stumbling blocks ?
Is it just the create table ? Can you show us what you have attempted so far ?
Just a word of warning on those tables. There seems to be a co-dependancy of departments and employees (manager-id) with those foreign keys. Meaning that a department cannot exist with an manager-id until such time that the row in the employee table exists. Similarly the Employee cannot exist with a department-ID until such time the Department exists (which of cours cannot happen until employees exist - ouch - huge catch-22).
To me that might imply that either department-id on Employee table or Manager-id on departments can be NULL.
Because of that rather confusing relationship, we must first create the tables (at least their structure - including primary keys) and then we can create the foreign keys.
It also means when adding rows, we need to first add employees, then their managers and their departments. One could question the legitimacy of department-id on the employee table. There does seem to ba a "rule" missing that further defines the dependancies or relationships between employee and department tables (ie manager-id)...
How does that sound so far ?
As far as CREATE TABLE syntax, you can google either MS SQL CREATE TABLE or MySQL CREATE TABLE and find examples. And similarly for FOREIGN KEYS (which are constraints).
Now if you have specific questions, show us what you are trying, show us where you need specific help (and "create table" is too general, and too close to providing an answer to one of the tasks). The more your are trying and doing, the more we can help your understanding and confusion.
I did it like this.
USE FINAL
GO
CREATE TABLE Departments
(
Department_ID vchar (20) null,
Department_Name char (14) Not Null,
Manager_ID bigint (10) FK refers to PK Employees,
Location_ID bigint (8) FK refers to PK Locations,
)
I haven't even attempted the other two tables as I am very tired and coming down with something that I picked up on our visit to family up north. If I Can get the three tables going everything else will be kosher. Im not a totall noob when it comes to this but the basic syntax they suggest kind of throws me off. Thanks.
Eagle






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
2. usually, every table has to have a primary key, which is a column used to uniquely identity each row, like sequential number. This column can't be empty.
3. there's no "vchar" data type. see http://msdn.microsoft.com/en-us/library/ms187752.aspx
4. there's no "refers to". See http://msdn.microsoft.com/en-us/library/ms174979.aspx , specifically the definition of column_constraint
Create Table LOCATIONS
(
LOCATION_ID int identity Primary Key,
POSTAL_CODE varchar(30),
CITY varchar(30)
STATE_PROVINCE varchar(30)
COUNTRY varchar(30)
)
The location_id being an "identity" is a special column. It will auto increment. The equivalent in MySQL is AUTO_INCREMENT, but in MySQL you can also do:
LOCATION_ID serial,
which is the same as:
LOCATION_ID BIGINT(20) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
Think you need to first create the tables and then seperately worry about the DDL to add the constraints for FOREIGN KEYS (ie as separate commands).
The above is covered off in those links previously supplied...

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
create table table1 (id int not null primary key)
create table table2 (id int not null primary key, col2 int references table1(id))
insert into table1 select 1 -- creates parent record in table1
insert into table2 select 1,1 -- creates child record in table2
Msg 102, Level 15, State 1, Line 7
Incorrect syntax near 'STATE_PROVINCE'.
which doesn't make sense to me because everything is worded correctly like it wants in the instructions






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
create table t (
col1 int ,
col2 varchar(50) ,
col3 int
)

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
Gotcha

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
See attached.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
It seems I am having an issue altering the table and adding the LOCATION_ID in my departments table.
I think the reason is because I kept what Will said and used the int identifier instead of say char (5).
See image please.
Look carefully at the table "employees" in the pdf file - does it refer anything from Locations?






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
alter table departments ADD CONSTRAINT FK_department_manager_id FOREIGN KEY (manager_id) REFERENCES employees (employee_id)
VAD you are correct, Departments is the only thing referencing back to LOCATIONS.
Mark so how do I correct the error I have?

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
LOCATION_ID FK refers to PK of Locations table.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
Ok quick question...how do I go back to the Location_ID and change the int integer to char(5). I think that is the best way to go about doing it/ Also if I do that, would I also have to go and change the departments reference?
This means that at some moments, the department can be without any manager at all - which in turn means that manager_id can be null. Foreign key can be null, it's allowed.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
The relationship of manager to department is interesting.
I think what the design is saying (and this is the bit where you need to really work out what the question is saying) :
1) all employees exist in employee table
2) managers are one of those employees
3) employees belong to managers
4) there are departments
5) there is a manager in charge of that department
then there is the question mark.... do employees belong to the manager or to a department. Right now the FK contraints say they cannot belong to a department (because of that circular argument before) so they have to have department as NULL. OR, they belong to a department and the department belongs to a manager. But right now we have two columns for each employee, department and manager and that is the confusing part.
In a relationship such as this, one might reasonably expect a manager / employee relationship, or a department / manager relationship - either way a chain of ownership can be established. But having both just adds one level of consusion because the (business) object "manager" is not quite the same as "employee" because they "own" different parts of the puzzle. They "own" departments and employees, and that is what the design is *trying* to show.
so my question is should I start over with the locations and departments (since I havent done any using of those in any select statement so far)? Once I rebuild them back in, the reference for Employees will be fine I am thinking. Let me know.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
1) add locations
2) add departments (with no manager - must be permitted to be NULL)
3) add management employees
4) update departments with management
5) add employees with managers (and department ID I guess)
and then in the columns on the other tables that refer to those primary keys, they are simply INT columns
@Mark if I was to go and change Employee_ID from char(5) to int, how would I exactly do that? Would it be
ALTER TABLE Employees
Change Employee_id char(5) to INT
GO
??






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
But at this point, before you add your FK's, can just as easily DROP TABLE <tablename> if it is scripted, then fix the sql, and do the create again.
for example look at this little test :
if object_id('tbl_ee_employee
create table tbl_ee_employee (emp_id char(5))
alter table tbl_ee_employee alter column emp_id int
-- but now lets look at a column with a constraint
if object_id('tbl_ee_employee
create table tbl_ee_employee (emp_id char(5) primary key)
alter table tbl_ee_employee alter column emp_id int -- this fails because it is a PK and "other objects" now depend on it.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
You will need to script your work anyway so it can be submitted for marking.
Just one more comment on the design with department-id and manger-id relationships....
say we have 2 departments (dep1 and dep2) and two managers (man1 and man2) and three employess emp1,emp2,emp3 belonging to dep1 and man1. Lets then change dep1 to have man2, and dep2 to be man1. We now have emp1,emp2,emp3 belonging to a department that is managed by someone who is not their manager.
And on that note I think I will leave you in the very capable hands of vadimrapp1 - it is nearly 3:45am down under and I really do need my beauty sleep (shame really, but necessary *laughing*)

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
It shows me to Insert INTO (though into is not needed) table
then of course the column names
then Valus
which makes sense to me. Anyways sorry If I am rambling.
@Mark thanks bud I do appreciate your help.
I don't know of a way to show the whole script being kept once I take it out and start a new line. Basically I do the script execute it, show that it completed successfully, then print screen it, save it, delete what I wrote and go again for the next table. I am also going to add the Alter table I did to add to the Departments to make sure I had the Department_ID and Location_ID.
drop table departments
drop table locations
create table locations (col1 <datatype> not null primary key, col 2 datatype, .... )
create table departments (col1 <datatype> not null primary key, col 2 datatype references locations(col1), col 3 datatype, .... )
create table employees(col1 <datatype> not null primary key, col 2 datatype references departments(col1), col 3 datatype, .... )
insert into locations(col1,col2,...) values 'value1','value2',... <- create 1nd location
insert into locations(col1,col2,...) values 'value3','value4',... <- create 2nd location
insert into departments(col1,col2,...)
insert into departments(col1,col2,...)
insert into departments(col1,col2,...)
...
insert into employees(col1,col2,...) values 'value1','value2',... <- 1st employee
insert into employees(col1,col2,...) values 'value3','value4',... <- 2nd employee
insert into employees(col1,col2,...) values 'value5','value6',... <- 3rd employee
...
update table departments set manager_id = <value> where id=<value> <-- that's where we assign
the manager to the department
...
For now, let's forget about the foreign key representing the relationship of departments to employees. If we have time, we can add it later, when we have finished with the main things. This will not prevent us from entering correct data.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
So what do I need to do next? Insert data right?

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
INSERT DATA Departments
(ProductionID, ShippingID, ManagementID)
VALUES
('ACME Novelties' , 'Freedom Freight' , 'Sales Manager')
GO
But, again, looking at the assignment, it says:
Be sure to paste in screenshots of the query and results for each question.
and then if the question 1 is "create the following 3 tables", then I'd think that the query to do that is exactly the SQL script that I mentioned - CREATE TABLE and so on. It's odd that she wants not the text of the query itself but screenshot of the text, but that's what it says.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
Msg 207, Level 16, State 1, Line 2
Invalid column name 'ProductionID'.
Msg 207, Level 16, State 1, Line 2
Invalid column name 'ShippingID'.
Msg 207, Level 16, State 1, Line 2
Invalid column name 'ManagementID'.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
INSERT Departments
[Departments]
Values
("Management' , 'Production' , 'Shipping')
GO
??

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
GO
/****** Object: Table [dbo].[Departments] Script Date: 11/02/2010 13:15:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Departments](
[DEPARTMENT_ID] [char](5) NOT NULL,
[DEPARTMENT_NAME] [varchar](20) NOT NULL,
[MANAGER_ID] [char](5) NULL,
[LOCATION_ID] [int] NULL,
PRIMARY KEY CLUSTERED
(
[DEPARTMENT_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Departments] WITH CHECK ADD FOREIGN KEY([LOCATION_ID])
REFERENCES [dbo].[LOCATIONS] ([LOCATION_ID])
GO
ALTER TABLE [dbo].[Departments] WITH CHECK ADD FOREIGN KEY([MANAGER_ID])
REFERENCES [dbo].[Employees] ([EMPLOYEE_ID])
GO
ALTER TABLE [dbo].[Departments] WITH CHECK ADD CONSTRAINT [FK_department_manager_id]
REFERENCES [dbo].[Employees] ([EMPLOYEE_ID])
GO
ALTER TABLE [dbo].[Departments] CHECK CONSTRAINT [FK_department_manager_id]
GO
[EMPLOYEE_ID] [char](5) NOT NULL,
[LAST_NAME] [varchar](20) NULL,
[FIRST_NAME] [varchar](20) NULL,
[EMAIL] [char](20) NULL,
[SALARY] [int] NULL,
[PHONE_NUMBER] [int] NULL,
[HIRE_DATE] [date] NULL,
[MANAGER_ID] [char](5) NULL,
[DEPARTMENT_ID] [char](5) NULL,
PRIMARY KEY CLUSTERED
(
[EMPLOYEE_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Employees] WITH CHECK ADD FOREIGN KEY([DEPARTMENT_ID])
REFERENCES [dbo].[Departments] ([DEPARTMENT_ID])
GO
ALTER TABLE [dbo].[Employees] WITH CHECK ADD FOREIGN KEY([MANAGER_ID])
REFERENCES [dbo].[Employees] ([EMPLOYEE_ID])
GO






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
[LOCATION_ID] [int] IDENTITY(1,1) NOT NULL,
[POSTAL_CODE] [varchar](30) NULL,
[CITY] [varchar](30) NULL,
[STATE_PROVINCE] [varchar](30) NULL,
[COUNTRY] [varchar](30) NULL,
PRIMARY KEY CLUSTERED
(
Open another instance of management studio
create new database
copy the script to create Locations from the first m.s. to the 2nd m.s.
run the script, so the 2nd m.s. creates table Locations in the 2nd database. Make the screenshot of that, with the result saying that it was successful.
Post the screenshot here.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
NOTE : email details removed - mark wills zone advisor






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
write down your requirements : 3 departments, 7 employees, and 2 locations.
for each department you need the information for the columns in the table. 1 department = 1 row = 1 insert. You end up with three inserts.
for each employee you need the information for the columns in the table. 1 employee = 1 row = 1 insert. You end up with seven inserts.
for each location you need the information for the columns in the table. 1 location = 1 row = 1 insert. You end up with two inserts.
Now because of the foreign key constraints, you must do the insert in the correct sequence...
1) first location (two insert statements)
2) then departments (three insert statements)
3) then manually pick a manager (or two or three) from your list of employees (on paper remember)
4) add those "special" employees first
5) update the departments manager-id with those employees
6) add the rest of the employees making sure the correct department and manager id is assigned
the format of the insert is :
INSERT <table_name> (<columns_list excluding the ID>) values (<source columns>)
we exclude the ID because they are identity and will be automatically allocated.
Lets take "locations" as an example:
INSERT LOCATIONS ([POSTAL_CODE], [CITY], [STATE_PROVINCE], [COUNTRY]) values ('2000','Sydney','NSW','Au
the format of the UPDATE statement is :
UPDATE <table_name>
SET <column_name> = <new_value>
WHERE <conditions>
for example if we want to update department 1 with employee_id 1 as the manager code
UPDATE DEPARTMENTS
SET MANAGER_ID = 1
WHERE DEPARTMENT_ID = 1
For money = use datatype MONEY and in insterts use the value e.g. 120000.00 (ie just a number without quotes and such like)
For integers = use datatype INT and in inserts / updates use the value e.g. 1 (ie just an integer without quotes)
For strings - use datatype VARCHAR(30) and in inserts use the string e.g. 'Some Name' (ie use single quotes around the character string)
(you may want to use VARCHAR(60))

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
You have :
1) create tables
2) Datatypes, Primary Keys
3) create constraints (Foreign Keys)
4) Inserts
5) Updates
You still have to do :
a) a SELECT statement
b) create a VIEW
c) database experiment (like "joe joins the company", or a clue from the sample they give "whats the average salary")
d) recommendations / improvements (hint : we have discussed a few above)
The best approach is to start playing with your SELECT statements because a view is like a stored select statement - creating a "virtual table" if you like - because you just use the view name as your datasource in a select statement just like a table.
When getting data from more than one place you need to JOIN those datasources.
Have a read of :
https://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/A_3102-SQL-101-SELECT.html
https://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/A_2685-SQL-Server-Joins-Explained-Logical-Joins.html
Using MM/DD/YYYY can also work - but can depend on how your database is setup - normally the US style date format doesnt present a problem, just "best practises" to use the universal date format.

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
It is actually good stuff - all it is doing is checking before it does something so there wont be any errors.
You cannot just delete - those constraints still exist...
That is also why it is good to first create your tables, then afterwards, apply the constraints.
Bonus points for you if you first check it and it runs without errors :)

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
Now when I try to do the shipping it gives me this error:
Msg 547, Level 16, State 0, Line 1
The UPDATE statement conflicted with the FOREIGN KEY constraint "FK__Departmen__MANAG__239
The statement has been terminated
My whole plan is to have Gary Ullom with the 13411 Emp ID be the manager over Shipping and Production.
So I want it to work with this:
UPDATE [Final].[dbo].[Departments
SET [MANAGER_ID] = 13411
WHERE [DEPARTMENT_ID] = 10091
GO
and then as well with this
UPDATE [Final].[dbo].[Departments
SET [MANAGER_ID] = 13411
WHERE [DEPARTMENT_ID] = 10244
GO
Both tend to give me that error I mentioned






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
I got this going for 4b:
4b. A subquery which returns all of the employees first and last name, their
department name, but only those employees who earn more than the average salary
for their department.
Here is something I got, but it isn't giving me the names of people who earn more than the average salary:
Select Departments.DEPARTMENT_NAM
From Employees
Join Departments
On employees.DEPARTMENT_ID = Departments.DEPARTMENT_ID
Group BY Departments.DEPARTMENT_NAM
Here is the results that it gives:
Check the picture, it is easier.
Question is, what can I put into that statement to get my SELECT STATEMENT to get the correct information?

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
Jason
SELECT EMPLOYEE_ID, DEPARTMENT_NAME, LAST_NAME, FIRST_NAME, SALARY
FROM employees, departments
WHERE salary >
(SELECT AVG(salary) from employees)
GO
I am attaching the print screen showing what the results are. It is almost like it is a in triplicate of it. Any help is appreciated.






EARN REWARDS FOR ASKING, ANSWERING, AND MORE.
Earn free swag for participating on the platform.
SELECT * FROM EMPLOYEES
JOIN Departments
ON Employees.Department_ID = Departments.Department_ID
JOIN
(Select DEPARTMENT_ID, AVG(Employees.SALARY)as Avg_Salary
From Employees
Group BY DEPARTMENT_ID) as SAL on SAL.department_id = employees.department_id
where employees.salary > SAL.avg_salary
Just like that and it will work out for me?
It works out rather well to be honest with you. If I include what I put above it adds a couple duplicates to the equation. This way it covers everything. Thanks Mark.
SELECT * FROM EMPLOYEES
JOIN Departments
ON Employees.Department_ID = Departments.Department_ID
should not show any duplicates - unless an employee has more than one department... Might be worth going back and double checking your data...

Get a FREE t-shirt when you ask your first question.
We believe in human intelligence. Our moderation policy strictly prohibits the use of LLM content in our Q&A threads.
Microsoft SQL Server
--
Questions
--
Followers
Top Experts
Microsoft SQL Server is a suite of relational database management system (RDBMS) products providing multi-user database access functionality.SQL Server is available in multiple versions, typically identified by release year, and versions are subdivided into editions to distinguish between product functionality. Component services include integration (SSIS), reporting (SSRS), analysis (SSAS), data quality, master data, T-SQL and performance tuning.